【Linux】通信が出来ていない!!tcpdumpでパケットを見て通信が出来ているか確認する流れ


サーバー間でテスト等を行うときに目的のサーバーにリクエストを送っても応答が無かったりして、テストが進まない時に通信が出来ていないケースがあった。


「繋がらない」と伝えるだけではなくパケットを確認するようにということですので、やり方を備忘録として残す。

使用しているインターフェースの確認

[root@xxx-xxx]route -vn
Kernel IP routing table
Destination  Gateway Genmask Flags Metric Ref Use Iface
x.x.x.x           x.x.x.x      x.x.x.x       xx      x          x    x      ethxx   

tcpdumpコマンドで条件を絞りたいため、通信を確認したいホストのIPとインターフェースを確認しておく。

tcpdumpコマンドをホストと出力ファイル名とインターフェースを指定して実行

上記手順で確認したインターフェースとホスト名を元にtcpdumpコマンドを実行する。

tcpdumpの構文は下記の通り。

tcpdump [ オプション ] [ EXPRESSION ]

tcpdumpを実行する。

■コマンド例

tcpdump -i ethX host XXX.XXX.XXX.XXX -w /tmp/XXX.pcap
tcpdump -nn -i any port 80 and not host XXX.XXX.XXX.XXX and not host XXX.XXX.XXX.XXX

80portで2つのipを除いてパケットを確認

tcpdump -i ethX host 127.0.0.1 -w /tmp/XXX.pcap
tcpdump -i ethX host 127.0.0.1 -w /tmp/XXX.pcap
  • iオプションでインターフェースを指定

host ○○で指定したホストにかかわるパケットをすべて表示

  • w で出力したパケットをファイルに出力

※この例のようにXXX.pcapと出力することでWireSharkツールで確認できる。

tcpdump -i any -n port 1813

1813ポートの全てのインターフェースをキャプチャする。IPアドレスの名前解決をしない。

tcpdumpのオプション例

1.rオプション
tcpdumpで指定したキャプチャを結果を読み込む

2.Aオプション
キャプチャデータをASCII表示

3.pオプション
自ホスト宛以外のデータをキャプチャしない

4.nnオプション
ホストアドレスに加えてポート番号等も名前に変換しない(sshと表示されるところが22と表示される)

5.nオプション
IPアドレスの名前解決をしない

6.not host XXX.XXX.XXX.XXX
※XXXのhostを含まずパケットを取る

tcpdumpの条件を指定した使い方

・送信元ipアドレスを指定

tcpdump src host[src_ip]

送信先ipアドレスを指定

tcpdump dst host[dst_ip]

送信先ipアドレスを指定

tcpdump dst host[dst_ip]

・送信元のポート番号を指定

tcpdump src port [port_num]

anyで複数指定

tcpdump -i any -nn port 1812
  • i any 複数インターフェースでキャプチャを指定したい場合のオプション

tcpdumpで取得したパケットの読み取り方

tcpdumpコマンドを実行するとコンソールに沢山情報が出るが読み取り方を知っておく必要がある。

18.40.17.200000 IP 127.0.0.1.9999 > 127.0.0.1.xxxx-acct: RADIUS, XXXXXXXX-Request (X), id: 0x11 length: 55
18.40.17.211111 IP 127.0.0.1.xxxx-acct > 127.0.0.1.9999: RADIUS, XXXXXXXX-Response (X), id: 0x11 length: 20
  • 読み方

1. まず時間が表示される。
 箇所:18.40.17.200000

2. IPヘッダが表示される
 箇所:18.40.17.200000

3. 送信元IP,送信元TCPポート,宛先IP、宛先TCPポートが表示される。[ipアドレス.ポート]
 箇所:IP 127.0.0.1.9999 > 127.0.0.1.xxxx-acct:
127.0.0.1の9999ポートから127.0.0.1.xxx-acct:にリクエストが来ているということ
※その下の"127.0.0.1.xxxx-acct > 127.0.0.1.9999:"は127.0.0.1.xxx-acctから返答しているということ

4. TCPヘッダ情報が表示される。
 箇所:XXXXXXXX-Request, id: 0x11 length: 55

さいご

最後まで読んでいただき、ありがとうございました。


もし、記載している内容が間違えていれば遠慮なくコメントしてください!


私自身の勉強になりますし、他の人がこの記事を見た時に間違えた情報を見ることになってしまうので💦