linux编写域网扫描工具,shell脚本+详细解析

目录

1、问题描述

2、需求分析

3、编写脚本

4、脚本优化


1、问题描述

        编写一个局域网扫描工具,获得整个局域网里哪些ip地址在使用,哪些没有在使用,同时显示在使用的ip地址对应的MAC地址,写到文件里,使用了的写入up.txt文件, 没有使用的写入down.txt文件。

2、需求分析

       针对上述问题,提取需求分析如下:

        ①  获取整个局域网内的IP地址

        ② 区分出哪些IP正在使用,并保存入up.txt文件内,哪些IP未被使用,并保存入down.txt文件内。

        ③同时显示使用的IP地址对应的MAC地址,一并存入up.txt文件内。

3、编写脚本

        下面是编写的第一个版本,但是扫描所需要的时间太长了,逐个IP进行扫描,速度太慢。

#!bin/bash

#循环ping整个局域网里的ip地址
for i in {1..254}
do
	
	if ping -c 1 -W 1 192.168.2.$i &>/dev/null;then
		echo "192.168.2.$i is up"
		echo "192.168.2.$i" >>up.txt
	else
	
		echo "192.168.2.$i is down"
		echo "192.168.2.$i" >>down.txt
	fi
	
done

脚本解析:

         使用for循环将IP逐个进行ping测试,使用if语句进行判断,如果ping的通就是正在使用的IP,反之则是未被使用的。

        ping命令的-W 是timeout,设置一个时间期限1秒钟; -c 为count数量,只ping一个包,$i是引用i这个变量。&>/dev/null,将获取到的一下不需要的输出写入到/dev/null这个文件,/dev/null俗称“黑洞”文件,是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。

        >>这个符号为追加重定向,将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。

4、脚本优化

        版本2使用多进程,可以将速度大大提高。

#!bin/bash

#清空文件
>up.txt
>down.txt

#循环ping整个局域网里的ip地址
for i in {1..254}
do
	#启动多进程去ping提升效率 ()&,启动子进程放在后台去执行
	(if ping -c 1 -W 1 192.168.2.$i &>/dev/null;then
		echo "192.168.2.$i is up"
	else
	
		echo "192.168.2.$i is down"
		echo "192.168.2.$i" >>down.txt
	fi)&
# &将其放在后台
	
done
#当父进程结束子进程还未结束,父进程要等子进程结束,然后再退出
wait
#将arp缓存表里的记录保存到up.txt内
arp -n|awk '/ether/{print $1,$3}' >up.txt

脚本解析: 

        >符号:将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。

        这样up.txt文件和down.txt文件,每次测试的时候就只会保存当前这次测试的数据。

        arp命令,可以来检查某个IP是否和其他的IP冲突了,arp命令可以同时得到ip和对应的MAC地址,也可以用来判断某个ip地址是否和其他ip冲突,使用的效果如下。

[root@nginx-kafka03 linux-test]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.2.2            ether   00:60:89:c0:00:08   C                     ens33
192.168.2.3            ether   00:60:89:ff:f6:05   C                     ens33

        使用awk命令进行截取,awk的具体使用可以参考下文。

         (2条消息) Linux的文本三剑客awk、sed、grep及其他文本处理命令,详细解析_忙碌且充实的博客-CSDN博客

        脚本的运行结果如下。

[root@nginx-kafka03 linux-test]# cat up.txt 
192.168.2.2 00:60:89:c0:00:08
192.168.2.3 00:60:89:ff:f6:05
[root@nginx-kafka03 linux-test]# cat down.txt 
192.168.2.4
192.168.2.5
192.168.2.13
192.168.2.9
192.168.2.11
...

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值