摘录地址:
http://publish.it168.com/2006/0518/20060518015901.shtml?positioncode=2169网友提问:我是一个小公司的网络管理员,最近总是出现IP地址冲突的问题,另外由于经常有外来人员使用笔记本连接公司网络,再加上公司的IP地址因为某种原因是手动设置的固定IP,公司对于IP地址分布也没有留有任何记录信息,所以当有新计算机要连接到网络中时只是随便设置一个,挑选的地址也是那些分布在网络末尾或比较大的数字,但是久而久之随意设置的IP地址过多,在新计算机连接网络时再设置IP地址很容易造成冲突。请问IT168的专家是否有好办法可以解决我目前遇到的问题,帮助我在设置IP地址前对网络中的所有IP地址进行扫描,明确哪个IP被占用,哪个没有被占用。当然了解了如何扫描网络中已占用的IP地址的话,我就可以将扫描到的地址打印进行保管,以后新计算机接入网络不使用这些地址即可。
【IT168 网友解答】在网络中出现IP地址冲突的问题是非常麻烦的,一方面他扰乱了我们网络管理员管理网络,另一方面他影响了普通用户的正常上网。特别是对于部分中小公司来说经常将IP地址与网络资源访问权限相关联,一旦IP地址被占用非法用户将能非法使用网络资源。遇到这种情况我们如何查出哪个IP地址被占用呢?
正如前面网友提出的问题一样,当公司使用手动设置IP地址且没有有效管理设置的IP地址的话,很容易出现随意设置地址并经常冲突的问题。遇到这种情况也需要我们学会扫描整个网络,将已经连接到网络中的IP地址进行记录,防止地址冲突现象的发生。我们主要有以下几个办法可以帮助大家扫描网络中已用的IP地址。
方法一:原始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缓存法