当我在Ubuntu盒子上运行这个时:
sudo ping google.com -c 25 -l 25
尽pipe事实上它应该(如果我正在读东西的话)每隔2秒发送一行,然后发送全部25个数据包。 奇怪的是,它声称我正在得到ping时间:
--- google.com ping statistics --- 25 packets transmitted, 24 received, 4% packet loss, time 0ms rtt min/avg/max/mdev = 23.370/28.067/32.902/2.895 ms, pipe 24
另外,如果我想早点保释,我需要为每个数据包打一次ctrl-C。 有没有人有任何线索可能造成这种情况?
如果您通过IP ping相对于主机名,您将收到预期的行为。
我仍在调查,以find为什么这是事实的根源。
# find IP address of host $ host -ta google.com google.com has address 74.125.225.17 google.com has address 74.125.225.19 google.com has address 74.125.225.20 google.com has address 74.125.225.18 google.com has address 74.125.225.16 # pick an IP and ping it, all output is displayed at once $ sudo ping 74.125.225.17 -c 25 -l 25 PING 74.125.225.17 (74.125.225.17) 56(84) bytes of data. 64 bytes from 74.125.225.17: icmp_seq=1 ttl=55 time=29.7 ms 64 bytes from 74.125.225.17: icmp_seq=2 ttl=55 time=30.4 ms 64 bytes from 74.125.225.17: icmp_seq=3 ttl=55 time=40.0 ms 64 bytes from 74.125.225.17: icmp_seq=4 ttl=55 time=40.4 ms 64 bytes from 74.125.225.17: icmp_seq=7 ttl=55 time=50.1 ms 64 bytes from 74.125.225.17: icmp_seq=5 ttl=55 time=50.4 ms 64 bytes from 74.125.225.17: icmp_seq=6 ttl=55 time=51.4 ms 64 bytes from 74.125.225.17: icmp_seq=8 ttl=55 time=52.4 ms 64 bytes from 74.125.225.17: icmp_seq=9 ttl=55 time=55.4 ms 64 bytes from 74.125.225.17: icmp_seq=10 ttl=55 time=56.4 ms 64 bytes from 74.125.225.17: icmp_seq=11 ttl=55 time=57.3 ms 64 bytes from 74.125.225.17: icmp_seq=13 ttl=55 time=58.3 ms 64 bytes from 74.125.225.17: icmp_seq=12 ttl=55 time=59.3 ms 64 bytes from 74.125.225.17: icmp_seq=14 ttl=55 time=60.3 ms 64 bytes from 74.125.225.17: icmp_seq=15 ttl=55 time=61.9 ms 64 bytes from 74.125.225.17: icmp_seq=16 ttl=55 time=62.3 ms 64 bytes from 74.125.225.17: icmp_seq=17 ttl=55 time=63.2 ms 64 bytes from 74.125.225.17: icmp_seq=18 ttl=55 time=64.2 ms 64 bytes from 74.125.225.17: icmp_seq=19 ttl=55 time=68.9 ms 64 bytes from 74.125.225.17: icmp_seq=20 ttl=55 time=69.2 ms 64 bytes from 74.125.225.17: icmp_seq=21 ttl=55 time=70.2 ms 64 bytes from 74.125.225.17: icmp_seq=22 ttl=55 time=75.9 ms 64 bytes from 74.125.225.17: icmp_seq=23 ttl=55 time=76.2 ms 64 bytes from 74.125.225.17: icmp_seq=24 ttl=55 time=77.2 ms 64 bytes from 74.125.225.17: icmp_seq=25 ttl=55 time=78.1 ms
UPDATE
在通过strace运行ping之后,我发现它在名称parsing时被挂起(不出意外)。 然而,引起我注意的事情是avahi-daemon 。 这项服务实现了苹果的Zeroconf架构(也被称为“Rendezvous”或“Bonjour”)。 换句话说,我不需要的function。
停止avahi守护进程后,ping行为恢复正常。
# sudo /etc/init.d/avahi-daemon stop
在启动期间禁用它可以通过以下方式完成:
# sudo update-rc.d -f avahi-daemon
另一个解决方法是简单地使用-n标志与ping。 挂断是在处理回复时执行的反向DNS查找。
如果在执行ping命令的同时执行tcpdump,则可能会发现它正在进行反向映射查找,即:查找IP到名称的DNS映射。
当数据包回来时,我猜avahi-daemon正在被查询。-l 25只关心出站数据包… ping仍然要完成它的工作并查找所有的名字,不pipe你是预先载入或不。 🙂