问题具体处理:
方法一:原始ping法
第一个方法比较简单,而且受环境限制比较大。众所周知在没有安装防火墙和设置过滤规则的计算机上都容许ICMP协议数据包的通过,那么我们可以通过“ping ip地址”这个命令来查看该IP地址是否有计算机使用。
通过任务栏的“开始->运行”,输入CMD后回车进入命令行模式。假设公司网络是192.168.1.0/255.255.255.0,那么我们可以通过ping 192.168.1.1,ping 192.168.1.2......ping 192.168.1.254来测试IP地址是否被占用。
由于原始ping法比较简单,这里就不详细说明了,但是这种方法遇到计算机上安装了防火墙对ICMP协议进行过滤的话,或者公司交换机和路由器上对ICMP实施ACL访问控制列表过滤的话就不可行了。因此这个方法受的局限比较大,一般测试的成功率不高,很容易把安装了防火墙的计算机对应的IP地址认为没有被使用。
方法二:扫描器扫描法
以前笔者在进行网络安全工作时就经常使用扫描器扫描网络中各个主机的漏洞,那么现在我们完全可以使用此方法来查看本网络有哪些IP地址被占用。由于扫描器扫描时并不是仅仅使用ICMP协议进行ping,我们可以设置,让扫描器多扫描几个端口,多扫描几个服务。这样即使计算机上安装了防火墙或者交换机上有访问控制列表过滤ICMP协议,只要该计算机开放了某些端口或某些服务,就不会出现漏报的问题。
通过扫描器扫描出来的IP地址列表还可以导出成HTML文件或TXT文件,这样方便我们保存和统计。
当然扫描器工具很多,这里推荐大家使用安全焦点出的X-SCAN和LANHELPER,感兴趣的读者可以自行下载使用。
使用扫描器扫描法可以查看出网络中几乎全部计算机使用的IP地址,但是对于那些极个别的设置了防火墙的复杂规则,过滤了大部分常用端口和常见服务的计算机来说,还是会或多或少的出现漏报或错报的问题,再加上扫描器扫描法还需要我们下载专门的工具,所以也给操作上带来了不方便。
方法三:sniffer监视法
作为网络管理员的我们应该都会使用sniffer,那么我们只需要在网络中开启sniffer对网络传输的数据包进行监视,过一段时间就会查出有哪些IP地址有数据包发出,这样就可以确定该IP地址已经被占用了。
不过用sniffer的方法不能将已经占用的IP地址保存成文件输出,而且给人有一种大材小用的感觉,毕竟sniffer正统不是用来做扫描IP地址的。
方法四:ARP缓存法
实际上笔者还发现了一个方法可以解决网友提出的问题,他的原理是通过ARP缓存来查看获得的,不用使用任何第三方工具,使用系统自带的ARP -A即可。
ARP缓存法是以前面介绍的ping法为基础而来的,对于安装了防火墙或设置过滤规则的计算机来说直接ping该IP地址是得不到返回信息的,但是有一点我们必须注意,那就是虽然无法从ping的返回信息中得出该IP地址是否被占用,但是从ARP缓存中却可以看出来。防火墙等过滤设置可以不容许ICMP协议返回数据包给源地址,但是由于ARP是工作在二层上的,所以在ICMP协议数据包被过滤前ARP已经通过查看MAC的方式获得了网络中在线主机的MAC地址。
只要网络中的计算机想上网,那么他一定会将自己网卡的MAC地址告诉与其连接的交换机,接下来交换机也会进一步将他知道的MAC地址信息反馈给使用ping的主机。这样我们在使用ping的主机上就能够通过是否获得MAC地址的方式来了解该IP地址对应的计算机是否在线了。
通过任务栏的“开始->运行”,输入CMD后回车进入命令行模式。假设公司网络是192.168.1.0/255.255.255.0,那么我们可以通过ping 192.168.1.1,ping 192.168.1.2......ping 192.168.1.254来测试IP地址是否被占用。当然不管ping返回的是通还是不通,全部ping完后执行arp -a命令显示ARP缓存表,出现在缓存表中的IP地址就是被占用的地址。
对批处理命令熟悉的网络管理员还可以自行编辑一个BAT命令来完成上面的一系列ping操作,BAT文件的内容如下:
FOR /L %i IN (0,1,255) Do ping X.X.X.%i -n 1
arp -a > IP.txt
这个批处理文件将列出所有正在使用的IP地址跟他们的MAC地址,保存到ip.txt文件中。当然语句中的X.X.X.%i是可以进行修改的,例如公司网络为192.168.1.0/255.255.255.0那么应该修改为
FOR /L %i IN (0,1,255) Do ping 192.168.1.%i -n 1
arp -a > IP.txt
最后再把这个方法的原理进行总结——我们向网段内所有IP地址发送一个icmp包,也许他屏蔽了ICMP包,但是这不要紧,只要他使用了该IP地址就一定会回应一个他的mac地址的数据包过来,这样用arp -a察看本地的arp缓存就能看到他的IP地址跟MAC地址了。
小提示:
我们也可以使用nbtstat -A IP命令来替代arp -a命令。
也许有人会问计算机能够禁止ARP数据包的通过呢?实际上计算机上能禁止ICMP包,但是是不可能禁止arp包的,如果禁止了arp,那么交换机就找不到该计算机了,该计算机也无法连接网络,访问网络上的任何资源了。所以说ARP缓存法让我们通过现象看到了本质,即使ping无法返回任何有用信息,但是实际上他已经帮助我们找出了在线主机对应的MAC地址,进一步了解了他的IP地址。
总结:
本文介绍了四种方法来解决查看网络中已经使用的IP地址的办法,当然各种方法有各种方法的特点,有的使用了第三方工具但是查看地址列表更加清晰,有的没有使用软件仅仅采用系统自带命令但是受到网络环境的局限,而有的虽然没有任何工具,但是需要编写批处理文件,难度较大。当然究竟采取哪个方法来解决实际问题,是需要我们这些网络管理员自己去比较,自己去选择的。个人推荐使用第四种方法——ARP缓存法。