pingを打ってパケットが返ってくるのはわかるけど、このIPアドレスでいいんだっけ?というのを確かめたいので、送信先で確かめたい。
→送信先でtcpdumpを使えばおk。
Vagrantで立ち上げたUbuntuにpingを送る例で考える。
ゲストOSでifconfigでIPアドレスを調べる。
guest$ ifconfig
:
eth1 Link encap:Ethernet HWaddr 08:00:27:29:40:3f
inet addr:192.168.33.10 Bcast:192.168.33.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe29:403f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13041 errors:0 dropped:0 overruns:0 frame:0
TX packets:7831 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1019013 (1.0 MB) TX bytes:628251 (628.2 KB)
:
192.168.33.10であることがわかる。
ホストOSでpingを打つ。
host$ ping 192.168.33.10
PING 192.168.33.10 (192.168.33.10): 56 data bytes
64 bytes from 192.168.33.10: icmp_seq=0 ttl=64 time=0.395 ms
:
ゲストOSでtcpdumpする。-i
でインターフェースを指定しないとループバック(127.0.0.1)を除くもっとも小さい番号で有効になっているものが選ばれるので、なにも来てなかったらインターフェースを確認する。
引数にicmpを指定すると、pingのエコー要求とエコー応答が見られる。
guest$ sudo tcpdump -i eth1 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:33:32.169761 IP 192.168.33.1 > 192.168.33.10: ICMP echo request, id 45906, seq 0, length 64
13:33:32.169808 IP 192.168.33.10 > 192.168.33.1: ICMP echo reply, id 45906, seq 0, length 64
:
ホストOSでtcpdumpすると、エコー応答が見られる
host$ sudo tcpdump icmp
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Packet Tap), capture size 262144 bytes
22:38:35.319694 IP 192.168.33.10 > 192.168.33.1: ICMP echo reply, id 45906, seq 302, length 64
:
こちらもインターフェースを指定するとエコー要求が見られる(指定しない時は何を見ている?)。
host$ sudo tcpdump -i vboxnet0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vboxnet0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:42:30.216089 IP 192.168.33.1 > 192.168.33.10: ICMP echo request, id 45906, seq 536, length 64
22:42:30.216375 IP 192.168.33.10 > 192.168.33.1: ICMP echo reply, id 45906, seq 536, length 64
:
ちなみに応答だけ見たいときは
$ sudo tcpdump 'icmp[0] == 0'
要求だけ見たいときは
$ sudo tcpdump 'icmp[0] == 8'
とすることができる。orで指定することも可能。
$ sudo tcpdump 'icmp[0] == 0 or icmp[0] == 8'
tcpdump
をgrep
してもなかなか表示されないので、-l
オプションを使う。-l
オプションをつけるとラインバッファになって、行ごとに出力してくれる。
$ sudo tcpdump -l | grep echo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
14:03:51.093896 IP 192.168.33.1 > 192.168.33.10: ICMP echo request, id 45906, seq 1812, length 64
14:03:51.093935 IP 192.168.33.10 > 192.168.33.1: ICMP echo reply, id 45906, seq 1812, length 64
: