LoginSignup
0
1

More than 3 years have passed since last update.

tcpdumpでping要求をみる

Posted at

はじめに

tcpdumpに触る機会があったので、色々と見てみようかと思いここにまとめておきます…

環境

前の記事で作成したdocker環境を流用して、2つのPC間の通信を見てみたいと思います。

実際には片方のコンテナにアタッチして仮想ネットワーク内の通信を除く感じでやっていきます。

インストール

下記のコマンドで簡単に入ります…
MACとかは標準で入っているみたいですね。

apt install tcpdump

コマンド

tcpdumpのコマンドは結構単純でネットワーク上のTCPプロトコルをみること、ファイルに書き込むことしか出来ない様子。

tcpdump -i eth0

*この場合はインターフェイスをeth0に規定しています

試してみる

ping

片方のコンテナにアタッチして、中からping要求を出してみます。

コンテナA
ifconfig
#eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
#        inet 172.19.0.2  netmask 255.255.0.0  broadcast 172.19.255.255
#        ether 02:42:ac:13:00:02  txqueuelen 0  (Ethernet)
#        RX packets 410  bytes 528949 (528.9 KB)
#        RX errors 0  dropped 0  overruns 0  frame 0
#        TX packets 241  bytes 14126 (14.1 KB)
#        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#
#lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
#        inet 127.0.0.1  netmask 255.0.0.0
#        loop  txqueuelen 1  (Local Loopback)
#        RX packets 12  bytes 1126 (1.1 KB)
#        RX errors 0  dropped 0  overruns 0  frame 0
#        TX packets 12  bytes 1126 (1.1 KB)
#        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
tcpdump -i eth0
#....
コンテナB
ping 172.19.0.2 -c 1
#64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.181 ms
コンテナA
#00:59:06.976543 IP 666c78f910c9.pinet > 7bfa751bb19e: ICMP echo request, id 12, seq 1, length 64
#00:59:06.976594 IP 7bfa751bb19e > 666c78f910c9.pinet: ICMP echo reply, id 12, seq 1, length 64

うん…分からない…

内容を読み解く

1行目のメッセージを見てみましょう。

00:59:06.976543      # 時間
IP                   # IP or IPv6
666c78f910c9.pinet > # 送り元?
7bfa751bb19e:        # 送り先?
ICMP                 # pingはicmpってプロトコル使っていると聞いたことが…
echo                 # ここからデータかな?
request,             # コマンド内容?
id 12,               # id...
seq 1,               # シーケンス1
length 64            # データ長?

tcpdumpの使い方
を参考にさせていただくと、どうやらコマンドでもう少し見やすく出来るっぽい…

記事を参考に下記の2つのオプションを付与してみます。

-nn アドレスやポート番号を名前に変換しないで表示します。
コンテナA
06:35:15.821137 IP 172.19.0.3 > 172.19.0.2: ICMP echo request, id 12, seq 1, length 64
06:35:15.821207 IP 172.19.0.2 > 172.19.0.3: ICMP echo reply, id 12, seq 1, length 64

これで、何となくですが下記のような通信が見えてきました。

  1. 172.19.0.3(コンテナB)が172.19.0.2(コンテナA)にICMPecho requestコマンドを発行
  2. 172.19.0.2(コンテナA)が172.19.0.3(コンテナB)にICMPecho replyコマンドを発行

Internet Control Message Protocol(Wikipedia)によるとICMPに規定されている通信の種類がいくつかあり、0 - Echo Reply Message8 - Echo Messageの二種類を利用して通信しているっぽい…

その他

これを試しているときに、別のコマンドが入ったので少し調べてみました。

arp

有名なARPってやつですね…

コンテナA
08:46:03.348573 ARP, Request who-has 172.19.0.3 tell 172.19.0.2, length 28
08:46:03.348599 ARP, Reply 172.19.0.3 is-at 02:42:ac:13:00:03, length 28
  1. arp172.19.0.3MAC Addres172.19.0.2が聞く
  2. arp172.19.0.3MAC Addres02:42:ac:13:00:03であることが解答される

という感じっぽいです。

Router Advertisement

こちらは、IPv6でアドレスを自動決定するときに利用するプロトコルらしいです…
IPv6ではDHCPとは違う仕組みでアドレスを決定するようですね。

08:46:35.515383 IP6 fe80::a477:c6ff:fe0c:1892 > ff02::2: ICMP6, router solicitation, length 16
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1