ネットワークの疎通確認でお馴染みのping。pingはICMPのEcho Requestを送ることによって宛先ホストの疎通状況を確認する。ICMPパケットには任意のペイロード (通常はASCII文字)を埋め込むことが出来る。
以下はpingコマンドで任意のペイロードをICMPのEcho Request パケットに埋め込む方法。
まずは普通にpingを実行してみる。
$ ping -c1 www.google.com
PING www.google.com (172.217.194.99): 56 data bytes
64 bytes from 172.217.194.99: icmp_seq=0 ttl=107 time=5.448 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.448/5.448/5.448/0.000 ms
以下は上記のping通信をtcpdumpでキャプチャした結果。
$ tcpdump -i en0 -vXn host www.google.com
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:09:31.560315 IP (tos 0x0, ttl 64, id 53333, offset 0, flags [none], proto ICMP (1), length 84)
192.168.1.106 > 172.217.194.99: ICMP echo request, id 8170, seq 0, length 64
0x0000: 4500 0054 d055 0000 4001 7904 c0a8 016a E..T.U..@.y....j
0x0010: acd9 c263 0800 e164 1fea 0000 607d 1e9b ...c...d....`}..
0x0020: 0008 8c8d 0809 0a0b 0c0d 0e0f 1011 1213 ................
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
14:09:31.565681 IP (tos 0x0, ttl 107, id 0, offset 0, flags [none], proto ICMP (1), length 84)
172.217.194.99 > 192.168.1.106: ICMP echo reply, id 8170, seq 0, length 64
0x0000: 4500 0054 0000 0000 6b01 1e5a acd9 c263 E..T....k..Z...c
0x0010: c0a8 016a 0000 e964 1fea 0000 607d 1e9b ...j...d....`}..
0x0020: 0008 8c8d 0809 0a0b 0c0d 0e0f 1011 1213 ................
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
ICMPパケットの末尾に!"#&'()*+,-./012367
という文字列が確認できる。自分の使用しているMacOSのpingコマンドはデフォルトで!"#&'()*+,-./012367
という文字列をICMPパケットに埋め込む模様。
この値をデフォルトのものから変更する場合は-p
オプションを使用する。
以下のpingコマンドはICMPパケットの末尾にhelloという文字列をパディングする。
ping -c1 -p '68656c6c6f' www.google.com
$ ping -c1 -p '68656c6c6f' www.google.com
PATTERN: 0x68656c6c6f
PING www.google.com (74.125.200.147): 56 data bytes
64 bytes from 74.125.200.147: icmp_seq=0 ttl=108 time=4.894 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 4.894/4.894/4.894/0.000 ms
以下は上記のping通信をtcpdumpでキャプチャした結果。
$ tcpdump -i en0 -vXn host www.google.com
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:21:04.495289 IP (tos 0x0, ttl 64, id 57732, offset 0, flags [none], proto ICMP (1), length 84)
192.168.1.106 > 74.125.200.147: ICMP echo request, id 60394, seq 0, length 64
0x0000: 4500 0054 e184 0000 4001 c401 c0a8 016a E..T....@......j
0x0010: 4a7d c893 0800 f9b5 ebea 0000 607d 2150 J}..........`}!P
0x0020: 0007 8e8b 6865 6c6c 6f68 656c 6c6f 6865 ....hellohellohe
0x0030: 6c6c 6f68 656c 6c6f 6865 6c6c 6f68 656c llohellohellohel
0x0040: 6c6f 6865 6c6c 6f68 656c 6c6f 6865 6c6c lohellohellohell
0x0050: 6f68 656c ohel
14:21:04.500104 IP (tos 0x0, ttl 108, id 0, offset 0, flags [none], proto ICMP (1), length 84)
74.125.200.147 > 192.168.1.106: ICMP echo reply, id 60394, seq 0, length 64
0x0000: 4500 0054 0000 0000 6c01 7986 4a7d c893 E..T....l.y.J}..
0x0010: c0a8 016a 0000 01b6 ebea 0000 607d 2150 ...j........`}!P
0x0020: 0007 8e8b 6865 6c6c 6f68 656c 6c6f 6865 ....hellohellohe
0x0030: 6c6c 6f68 656c 6c6f 6865 6c6c 6f68 656c llohellohellohel
0x0040: 6c6f 6865 6c6c 6f68 656c 6c6f 6865 6c6c lohellohellohell
0x0050: 6f68 656c ohel
参考
https://en.wikipedia.org/wiki/Ping_(networking_utility)