Linux - ping文件中的所有设备以检查可访问性

时间:2014-01-20 14:21:35

标签: linux ubuntu ping icmp

我有一个包含大约500个设备的文件,我需要ping它以检查它们当前是否可以从我的网络周围的各个子网访问。它本质上是检查路由/可访问性问题的基本测试。

不确定从哪里开始。我有一个基本文件,我已经逐行将每个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。抱歉不知道从哪里开始!

干杯 史蒂夫。

3 个答案:

答案 0 :(得分:3)

您应该在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

答案 1 :(得分:1)

基本架构将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

}

答案 2 :(得分:1)

我可能会使用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几乎无法做任何事情。