通过ping网段中的IP地址,根据返回的状态信息,判断主机的网络状态。
下面分享两个可以实现这个功能的shell脚本。
脚本1,
复制代码 代码示例:
#!/bin/sh
# Ping网段所有IP
# 2012/02/05
ip=1 #修改初值
while [ $ip != "254" ]; do
#yes正常,no主机不存在或不正常
ping 192.168.0.$ip -c 2 | grep -q "ttl=" && echo "192.168.0.$ip yes" || echo "192.168.0.$ip no"
ip=`expr "$ip" "+" "1"`
done
输出结果:
192.168.0.1 yes
192.168.0.2 no
192.168.0.3 no
192.168.0.4 no
192.168.0.5 yes
192.168.0.6 no
192.168.0.7 yes
笔者在自己的网络中测试的结果如下:
如果以上输出全部为no的话,则可能主机上通过iptables禁用了ping。
脚本2,
复制代码 代码示例:
#!/bin/sh
# Ping网段所有IP
ip="192.168.0."
for i in `seq 1 254`
do
ping -c 2 $ip$i | grep -q 'ttl=' && echo "$ip$i yes"|| echo "$ip$i no"
#yes正常,no主机不存在或不正常
done
输出结果:
192.168.0.1 yes
192.168.0.2 no
192.168.0.3 no
192.168.0.4 no
192.168.0.5 yes
192.168.0.6 no
192.168.0.7 yes
最后,介绍下用于ping多个域名的一段shell脚本。
通过ping命令,找出域名与IP地址的对应关系。
代码如下:
复制代码 代码示例:
#!/bin/sh
# filename ping.sh
# edit by www.jb200.com
for a in `cat list`;do
ping -c 1 $a;
done
运行脚本:
#./test.sh
代码说明:
1,在运行脚本之前,创建list文件,里面写入要检测的域名,一行一个。
形如:
a.jb200.com
b.jb200.com
c.jb200.com
...等等。
2,-c 是ping的参数。-c 1 表示ping完成一次。
附,ping参考。
参 数:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络界面送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。