How to PING with packet size increment?
Hi.
I'd like some advice on how to accomplish something at the Linux command line that I have been doing at the Windows and OSX command line for years..
Okay, so sometimes it is useful in network administration to carry out a ping sweep that increases the packet size incrementally while pinging a single host. With the 'do not fragment' bit set, this can be used to quickly determine the maximum MTU between two hosts without faffing about with trial and error. Or it can be used to test a problematic connection for MTU 'black holes', whereby packets of a certain size - but not necessarily the largest - do not make it across a connection.
From a Mac OSX terminal you can achieve this with the command: ping -g 56 -G 1492 -h 10 -D [ip address]
The -g and -G flags define the minimum and maximum packet size respectively. While the -h [number] is the amount by which to increment the packet size each time. The -D specifies 'Do Not Fragment'.
For example, we might run this ping sweep against Google's public DNS ..
$ ping -g 56 -G 1492 -h 10 -D 8.8.4.4
PING 8.8.4.4 (8.8.4.4): (56 ... 1492) data bytes
64 bytes from 8.8.4.4: icmp_seq=0 ttl=58 time=7.815 ms
74 bytes from 8.8.4.4: icmp_seq=1 ttl=58 time=8.034 ms
84 bytes from 8.8.4.4: icmp_seq=2 ttl=58 time=12.081 ms
94 bytes from 8.8.4.4: icmp_seq=3 ttl=58 time=7.721 ms
104 bytes from 8.8.4.4: icmp_seq=4 ttl=58 time=7.507 ms
...[output omitted]...
1434 bytes from 8.8.4.4: icmp_seq=137 ttl=58 time=11.224 ms
1444 bytes from 8.8.4.4: icmp_seq=138 ttl=58 time=17.454 ms
1454 bytes from 8.8.4.4: icmp_seq=139 ttl=58 time=8.477 ms
1464 bytes from 8.8.4.4: icmp_seq=140 ttl=58 time=8.788 ms
1474 bytes from 8.8.4.4: icmp_seq=141 ttl=58 time=8.717 ms
ping: sendto: Message too long
ping: sendto: Message too long
Request timeout for icmp_seq 142
--- 8.8.4.4 ping statistics ---
144 packets transmitted, 142 packets received, 1.4% packet loss
round-trip min/avg/max/stddev = 7.362/9.731/20.369/1.944 ms
Windows is (as ever) rather more limited with its default command line tools. But this can be fixed with 3rd party applications; in this case hrPING.
Once you have hrPING installed you can achieve the same incremental increase in packet size by running something like from the Windows command prompt: hrping [ip address] -f -l 36:1500:10 -s 500 -n 148
The -l 36:1500:10 specifies packets from 36 to 1500 bytes, with a size increment of 10 bytes each time a ping is sent. The -f specifies 'Do Not Fragment'. etc.
Again a ping sweep against Google's public DNS ..
C:\Windows\system32>hrping 8.8.4.4 -f -l 1:1500:10 -s 500 -n 148
This is hrPING v5.04 by cFos Software GmbH -- http://www.cfos.de
Source address is 192.168.10.18; using ICMP echo-request, ID=0812
Pinging 8.8.4.4 [8.8.4.4]
with 1-1500 bytes data (29-1528 bytes IP):
From 8.8.4.4: bytes=29 seq=0001 TTL=58 ID=3961 time=6.667ms
From 8.8.4.4: bytes=39 seq=0002 TTL=58 ID=3962 time=6.358ms
From 8.8.4.4: bytes=49 seq=0003 TTL=58 ID=3963 time=6.305ms
From 8.8.4.4: bytes=59 seq=0004 TTL=58 ID=3964 time=6.598ms
From 8.8.4.4: bytes=69 seq=0005 TTL=58 ID=3965 time=6.500ms
From 8.8.4.4: bytes=79 seq=0006 TTL=58 ID=3966 time=6.248ms
From 8.8.4.4: bytes=89 seq=0007 TTL=58 ID=3967 time=6.263ms
From 8.8.4.4: bytes=99 seq=0008 TTL=58 ID=3968 time=6.599ms
...[output omitted]...
From 8.8.4.4: bytes=1439 seq=008e TTL=58 ID=3984 time=6.935ms
From 8.8.4.4: bytes=1449 seq=008f TTL=58 ID=3985 time=7.042ms
From 8.8.4.4: bytes=1459 seq=0090 TTL=58 ID=3986 time=6.936ms
From 8.8.4.4: bytes=1469 seq=0091 TTL=58 ID=3987 time=6.957ms
From 8.8.4.4: bytes=1479 seq=0092 TTL=58 ID=3988 time=6.979ms
From 8.8.4.4: bytes=1489 seq=0093 TTL=58 ID=3989 time=7.001ms
From 8.8.4.4: bytes=1499 seq=0094 TTL=58 ID=398a time=6.991ms
Packets: sent=148, rcvd=148, error=0, lost=0 (0.0% loss) in 73.507403 sec
RTTs in ms: min/avg/max/dev: 6.248 / 6.738 / 9.222 / 0.311
Bandwidth in kbytes/sec: sent=1.538, rcvd=1.538
Correlation: 50.4%, estimated speed: 673.35 kbytes/sec
Sooo...
My question is: What command line tool can I use to achieve the same thing in Ubuntu/Linux?
I've had a bloody good rummage around Google but I can't find any examples of how to do the same automatic increment of the packet size upon each ping.
I know how to search for the maximum MTU manually, using trial and error. This would look like this...
$ ping -M do -s 1500 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1500(1528) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3023ms
$ ping -M do -s 1490 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1490(1518) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2014ms
$ ping -M do -s 1480 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1480(1508) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3023ms
$ ping -M do -s 1470 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1470(1498) bytes of data.
1478 bytes from 8.8.4.4: icmp_seq=1 ttl=59 time=6.74 ms
1478 bytes from 8.8.4.4: icmp_seq=2 ttl=59 time=6.69 ms
1478 bytes from 8.8.4.4: icmp_seq=3 ttl=59 time=6.77 ms
^C
--- 8.8.4.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 6.697/6.740/6.774/0.032 ms
$ ping -M do -s 1475 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1475(1503) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3024ms
$ ping -M do -s 1474 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1474(1502) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2016ms
$ ping -M do -s 1473 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
^C
--- 8.8.4.4 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 1999ms
$ ping -M do -s 1472 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 1472(1500) bytes of data.
1480 bytes from 8.8.4.4: icmp_seq=1 ttl=59 time=6.74 ms
1480 bytes from 8.8.4.4: icmp_seq=2 ttl=59 time=6.59 ms
1480 bytes from 8.8.4.4: icmp_seq=3 ttl=59 time=6.64 ms
1480 bytes from 8.8.4.4: icmp_seq=4 ttl=59 time=6.61 ms
^C
--- 8.8.4.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 6.597/6.651/6.744/0.080 ms
... But I don't want to have to do this manually.
Please can someone point me to a Linux command line tool that can do the automatic incremental packet size increase?
Thanks.
Idzi
Last edited by Idzi; May 16th, 2014 at 02:25 PM.
-
May 16th, 2014 #2
Re: How to PING with packet size increment?
If ping doesn't do it - check the man page - writing a tiny script would be pretty easy. Check the "ABSG" for howto do this easily. Should be less than 3 lines.
-
May 16th, 2014 #3
Staff Emeritus
- Join Date
- Apr 2012
- Beans
- 6,473
Re: How to PING with packet size increment?
You can just put the command in a loop
Code:for size in {1460..1476..4}; do ping -s $size -c 4 -M do google.com; done
Code:size=1272; while ping -s $size -c1 -M do google.com >&/dev/null; do ((size+=4)); done; echo "Max MTU size: $((size-4+28))"
Last edited by steeldriver; May 16th, 2014 at 02:56 PM.
fonte:
http://ubuntuforums.org/showthread.php?t=2224447
0 comentários:
Postar um comentário