各プロトコルがどのような通信を行うのか調べる場合や、不審な通信が行われていないか等を調べる目的で、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.