windows,linux,solaris下如何指定ping命令的发包数

小惠 2010-10-09

最近在写个程序用Runtime.exec来执行操作系统的ping命令以获得目标网络信息。

但是在solaris却遇到了困难,就是无法指定发包数量,需要手工ctrl+c停止命令,才会有统计信息的输出,后来研究了一把,终于得到了解决办法,下面先分享下各个系统上的ping命令是如何指定发包数的。

大家应该对windows下的ping很熟悉了。我们执行ping命令时,默认发送4个数据包,可以通过n参数指定发包数,并且最后还有个统计数据,如:

引用

C:\DocumentsandSettings\Administrator>ping-n2192.168.0.134

Pinging192.168.0.134with32bytesofdata:

Requesttimedout.

Requesttimedout.

Pingstatisticsfor192.168.0.134:

Packets:Sent=2,Received=0,Lost=2(100%loss),

C:\DocumentsandSettings\Administrator>

而linux上也可以指定发包数,如:

引用

[root@eomssso1~]#ping-c310.243.24.3

PING10.243.24.3(10.243.24.3)56(84)bytesofdata.

64bytesfrom10.243.24.3:icmp_seq=1ttl=255time=4.36ms

64bytesfrom10.243.24.3:icmp_seq=2ttl=255time=0.266ms

64bytesfrom10.243.24.3:icmp_seq=3ttl=255time=0.258ms

---10.243.24.3pingstatistics---

3packetstransmitted,3received,0%packetloss,time1998ms

rttmin/avg/max/mdev=0.258/1.628/4.360/1.931ms

[root@eomssso1~]#

经过研究solaris下的ping参数,发现其实也是可以实现发送指定的数据包,只不过参数的选择上有些特定的规则,先看效果,效果如下:

引用

root@temip#ping-s10.243.24.3564

PING10.243.24.3:56databytes

64bytesfromemipserver1(10.243.24.3):icmp_seq=0.time=0.ms

64bytesfromemipserver1(10.243.24.3):icmp_seq=1.time=0.ms

64bytesfromemipserver1(10.243.24.3):icmp_seq=2.time=0.ms

64bytesfromemipserver1(10.243.24.3):icmp_seq=3.time=0.ms

----10.243.24.3PINGStatistics----

4packetstransmitted,4packetsreceived,0%packetloss

round-trip(ms)min/avg/max=0/0/0

root@temip#

这里有3个重要的参数,-s、56和4,其中-s可以替换为-I,56为指定数据包大小,4表示发包次数为4次。

这3个参数缺一不可,我们来试试运行ping-s10.243.24.314,指定数据包大小为1,结果如下:

引用

root@temip#ping-s10.243.24.314

PING10.243.24.3:1databytes

9bytesfromemipserver1(10.243.24.3):icmp_seq=0.

9bytesfromemipserver1(10.243.24.3):icmp_seq=1.

9bytesfromemipserver1(10.243.24.3):icmp_seq=2.

9bytesfromemipserver1(10.243.24.3):icmp_seq=3.

----10.243.24.3PINGStatistics----

4packetstransmitted,4packetsreceived,0%packetloss

root@temip#

可以发现,如果指定的数据包太小,则没有最大最小及平均耗时的统计(需要>=8),

相关推荐