我有一个包含大约500个设备的文件,我需要ping来检查它们是否可以从我networking的各个子网访问。 这本质上是一个检查路由/可访问性问题的基本testing。
不知道从哪里开始真的。 我有一个基本的文件,我已经把每个单独的IP在一个文件中逐行。
例如,该文件如下所示:
192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4
我需要它返回类似下面的内容,如果第三行没有得到答复:
192.168.1.1 Accessible 192.168.1.2 Accessible 192.168.1.3 Inaccessible 192.168.1.4 Accessible
我在这里运行Ubuntu。 抱歉,不知道从哪里开始!
干杯史蒂夫。
您应该在ping扫描模式下使用nmap
:
nmap -sn -oG - -v -iL hosts_to_scan.txt
这将尝试ping包含在hosts_to_scan.txt
文件中的所有主机。
顺便说一句,你也可以指定一个子网,如果是这样的话:
nmap -sn -oG - -v 192.168.1.0/24
并/或将结果保存到文件中:
nmap -sn -oG status.txt -v 192.168.1.0/24 nmap -sn -oG status.txt -v -iL hosts_to_scan.txt
基本架构将是ping每台服务器并打印结果。
如果您将IP存储在ips.txt
文件中,则可以执行以下操作:
while read my_ip do test_ping $my_ip done < ips.txt
然后创建一个函数,比如test_ping
,对每个IP ping一次:
test_ping () { if ping -c 1 $1 &> /dev/null then echo "$1 Accessible" else echo "$1 Inaccessible" fi }
我可能会使用nmap作为长列表,但是如果你在命令行中,需要快速的一行代码,这也可以:
$ for i in `cat file.txt `;do ping -c 1 $i;done PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=50 time=16.271 ms --- 8.8.8.8 ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 16.271/16.271/16.271/0.000 ms PING 8.8.4.4 (8.8.4.4): 56 data bytes 64 bytes from 8.8.4.4: icmp_seq=0 ttl=50 time=16.030 ms --- 8.8.4.4 ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 16.030/16.030/16.030/0.000 ms
从积极的方面来看,这种方法很快就很容易记住。 工作(可能)与所有主要的shell(bash,zsh,* sh?)。
另一方面,它是相当详细的,你不希望在200 IP,甚至10可能很难监控。
如果nmap
无法剪切,我会用ruby,pytho或其他任何你喜欢的语言编写脚本。
编辑:这一个是更清洁,也有一些额外的统计资料:
for i in `cat file.txt `;do ping -c 1 $i|grep 64;done 64 bytes from 8.8.8.8: icmp_seq=0 ttl=50 time=15.397 ms 64 bytes from 8.8.4.4: icmp_seq=0 ttl=50 time=13.170 ms
gnu-tools几乎没有什么不可以做的。