搜索的一个部分就是在局域网中寻找存在的主机。假定你在一台链接至局域网的计算机旁,而且具备一个有效的网络接口,最直接的方法就是ping每个所在子网的IP地址,而且查看哪一个地址有响应。很是遗憾的是,不是全部的ping命令都是平等建立的。做为ICMP的实现,不一样的操做系统给出的ping的功能不太同样。该命令在Windows下的实现具备严格的限制,而且不支持对广播地址的ping命令。大部分BSD系统的ping命令有时支持对整个子网进行ping的操做,而有时则不支持。Linux网络包的ping命令一般支持-b选项,该选项容许用户对广播地址的ping操做。
因为ping广播地址是一种不肯定的事件,甚至不作得调查这种可能性。实际上,若是进行搜索,例如,对来自Unix系统的24位子网掩码网络,在命令行中进行一次简单的bash会效率更高:
[root@mail]# x=1; while [ $x -lt "255" ]; do ping -c 1 192.168.1.$x | grep "bytes from" | awk '{print $4 "up!"}'; let x++; done
192.168.1.1:up!
192.168.1.2:up!
192.168.1.10:up!
192.168.1.11:up!
192.168.1.12:up!
192.168.1.13:up!
192.168.1.14:up!
192.168.1.15:up!
192.168.1.18:up!
192.168.1.30:up!
192.168.1.31:up!
192.168.1.32:up!
192.168.1.40:up!
……
若是你在你的环境中运行上面的命令耗费了太多的时间,那么能够经过使用更短的超时来加速这种操做。大部分Unix的ping版本支持-t选项。若是LAN速度很快,300ms的超时将会很安全。
若是怀疑网络易于丢失数据包,请使用两次ping命令来处理数据包丢失的可能性,接着使用sort以劲uniq工龄这些结果。下面是一个范例,在迅速以及有损的网络上运行一样的具备300ms超时的ping-sweep命令:
[root@mail]# x=1; while [ $x –lt “255” ]; do ping –c 2 –t 0.3 192.168.1.$x | grep “bytes from” | awk ‘{print $4 “up!”}’; sort | uniq; let x++; done
这几乎是映射局域网的最佳方法,但与更加深奥的工具不一样,你可以在所使用的Unix版本的计算机上依靠bash、ping、grep、awk、sort及uniq。尽管看起来使用的命令很复杂,但牢记这种概念是很容易的。
在Microsoft Windows计算机上,状况稍微有些不一样。再次强调,即便它不是一种进行ping-sweep的最优方式,在命令行窗口中执行该命令来查看哪些主机可用是很是容易的:C:\>for /L %H in (100,1,254) DO ping -w 30 -n 1 192.168.1.%H | find "Reply" >> D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.100 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.101 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.102 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.103 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.104 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.105 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.106 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.107 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.108 | find "Reply" 1>>D:\hostlist.txt
C:\>ping -w 30 -n 1 192.168.192.109 | find "Reply" 1>>D:\hostlist.txt
……
C:\>type hostlist.txt
Reply from 192.168.192.100: bytes=32 time<1ms TTL=128
Reply from 192.168.192.101: bytes=32 time=1ms TTL=32
……
对于全部的小型局域网,或者若是工做于某个大型局域网当中的一个小型的子网当中,它在使用户知晓哪台主机开启,而且对ICMP有响应上,是比较有效的。
使用这些技巧的一个最大问题就是,就将会被注意到。向每一台主机有序发送不少ICMP消息会很引人注意,而且偏偏是正规IDS系统所检测的类型。同时,这种方法假设计算机已经使用正确的TCP/IP设置链接至局域网(这一点倒不用特别担忧,不少管理员使用DHCP为客户计算机动态分配IP地址,只要那些计算机拥有正常的物理链接,开机后应该会正常接入网络)。它还假设所试图映射的全部计算机都会响应ICMP回显数据包(目前有不少设备运行在基于主机的防火墙上,而且有人极可能会在他们的安全策略中禁止ICMP响应。中国大陆不少用户所使用的主机杀毒软件都带有桌面防火墙功能)