tcpdump で パケット解析

■tcpdumpコマンドとは

各プロトコルがどのような通信を行うのか調べる場合や、不審な通信が行われていないか等を調べる目的で、I/F上を流れるパケットを採集したいときは、パケットキャプチャツールを利用します。Linux では tcpdump コマンドを使うことでパケットキャプチャを行うことが可能です。tcpdump はユーザ権限で利用できてしまうとセキュリティ上問題があるため、通常 root 権限でのみ実行できます。

また、tcpdumpで採集したファイルはwiresharkやetherrealで開くことが可能です。-wオプションを利用して結果をファイル書き込む場合は.pcap拡張子にしておきましょう。

■コマンド書式

tcpdump [オプション] [対象パケットの条件式]

■条件式オプション

tcpdump の書式において、「対象パケットの条件式」部分では以下のような指定を組み合わせて使うことができ、条件に合致したパケットのみが表示されます。条件式を何も書かなかった場合は、すべてのパケットが対象になります。

書式 意味
dst port xx 宛先ポートの指定
src port xx 送信元ポートの指定
host xx.xx.xx.xx 対象ホストを指定
tcp TCPパケットを対象とする。
udp UDPパケットを対象とする。
icmp ICMPパケットを対象とする。
arp ARPパケットを対象とする。
and [条件] かつ [条件]とする。
or [条件] または [条件]とする。

■オプション

書式 意味
-c 指定されたパケット数をキャプチャしたら自動終了。
-i キャプチャ対象のI/Fを指定
-n DNSの名前解決(逆引き)を行わない
-nn ポート番号の変換を行わない(22 -> SSHなど)
-w ファイル名.pcap ファイルにpcap形式で出力する。wiresharkで開く用。
-s 0 キャプチャする1つあたりのパケットサイズを無制限とする。(デフォルトは65535byteまで)

■コマンド使用例

eth0を流れるパケットを50個キャプチャする。

[root@rproxy ~]# tcpdump -c 50 -i eth0

SSHパケットをキャプチャする。

[root@rproxy ~]# tcpdump -i eth0 -n tcp dst port 22

googleのパブリックキャッシュDNS(8.8.8.8)との通信をキャプチャする。

[root@rproxy ~]# tcpdump -i eth0 -n host 8.8.8.8

googleのパブリックキャッシュDNS(8.8.8.8)とのICMPパケットをキャプチャする。

[root@rproxy ~]# tcpdump -c 50 -i eth0 -n host 8.8.8.8 and icmp

yahoo.co.jpへの宛先TCP80番ポートへの通信をキャプチャする。

[root@rproxy ~]# tcpdump -i eth0 -n host yahoo.co.jp and tcp dst port 80

自分宛のFTPセッション開始の通信をキャプチャする

[root@rproxy ~]# tcpdump -c 50 -i eth0 -n host 59.106.191.172 and tcp dst port 21

DNS(53ポート)の通信をファイルに記録する

[root@rproxy ~]# tcpdump -i eth0 -n udp dst port 53 -w unbound.pcap &

複数ポートを同時指定し、キャプチャする。

[root@lab-ns01 ~]# tcpdump -i eth0 -nn dst port 53 or src port 53

Copyright © 2021 たぐたぐ.com. All rights reserved.