概要  
ネットワーク上に流れるパケットをモニタリングする。オプションとして条件式を指定すれば,取得したい情報にフィルタリングしてパケットを取得できる。通常は,root権限をもつ場合にのみ利用可能。

 構文  

tcpdump [-f] [-l] [-n] [-N] [-R] [-S] [-t] [-v] [-x] [-X] [-c パケット数] [-i LANインタフェース名] [-s データ長] [-w ファイル名] [-r ファイル名] [-F ファイル名] [条件式]


 利用環境  
Red Hat Linux, ○(tcpdump-3.7.2-7 にて確認)

 オプション  

ここでは,主に使用すると考えられるオプションのみ紹介する。

-f外部のホストとのやりとりに対しては外部のアドレスのみを表示する。その際に,名前解決を行わずにIPアドレスやポート番号をそのまま表示する。内部のアドレスは名前解決をして,解決した名前で表示する。
-l標準出力の内容をバッファリングする。出力結果をパイプ(|)で他のプログラムに渡す場合には,このオプションを指定する必要がある。標準出力でキャプチャを監視しながら取得したデータを保存しておきたい場合に有効である。
-nIPアドレスやポート番号などを名前に変換せずに表示する。IPアドレスなどを表示する際には通常,名前解決を行い解決した名前で表示する。だが,このオプションを指定すると名前解決を行わず,IPアドレスやポート番号をそのまま表示する。
-Nホスト名のうちのドメイン名の部分を表示しない。例えば,ns.example.comとやりとりする場合,通常は「ns.example.com」と表示するが,このオプションを指定するとドメイン名の部分が省略され「ns」と表示する。「-n」オプションと同時に指定すると,「-n」オプションのほうがが優先され,名前変換しないで表示される。
-STCPシーケンス番号を絶対値で表示する。通常,シーケンス番号は必ず「1」から始まるとは限らず,毎回ランダムな値から始まる。tcpdumpでは通常,このシーケンス番号を「1」から始まる相対値で表示するが,このオプションを指定すると実際にやりとりされているシーケンス番号をそのまま表示する。
-t時間情報を出力しない。通常はパケット情報出力時に時間情報を表示するが,このオプションを指定すると時間情報は表示しない。
-v詳細情報を出力する。このオプションを指定すると,通常の情報に加え,TOS(type of service)値,TTL(time to live)値,フラグ情報,サービス情報なども表示する。
-xリンク・レベル・ヘッダーを除く全てのパケットの内容を,16進で表示する。snaplenが指定されている場合,パケットのサイズがsnaplenより小さければ全てのパケット情報を,パケットサイズがsnaplenより大きければsnaplenバイト分のデータを出力する。
-X16進で表示する際に,ASCII文字も表示する。「-x」オプションと同時に指定した場合,16進とASCII文字の両方が表示されることとなる。ただし,パケットの箇所によっては,-xオプションを指定しない場合にも16進とASCII文字の両方が表示される。
-c パケット数受信するパケット数を指定する。この「-c」オプションを指定した場合,ここで指定したパケット数を受信した後tcpdumpプログラムを終了する。このオプションを指定しない場合,「Ctrl+Z」を押すまでパケットを取得し続ける。
-i LANインタフェース名監視するLANインタフェースを指定する。複数のLANインタフェースが存在する場合,インタフェース名で指定したインタフェースを監視する。このオプションを指定しない場合,ループバック・インタフェースを除くLANインタフェースのリストの中から,最も小さい番号で有効になっているLANインタフェースを監視する。
-s データ長取得するパケットのデータ長を指定する。このオプションを指定すると,各パケットから snaplenバイトのデータを取得する。このオプションを指定しない場合,68バイトのデータを取得する。パケットを取得したいプロトコルによっては,68バイトのデータでは情報が足りなくなるため,その場合,このオプションで取得するデータ長を指定する。このオプションの制限によりデータが切り詰められたパケットは,出力時に「[|プロトコル名]」の形式で出力し,プロトコル名にはデータの切り捨てが生じたプロトコルの名前を表示する。ただし,データ長を大きく指定し過ぎるとパケットの消失が発生する可能性も出てくるため,必要最小限の大きさを指定するのが望ましい。
-w ファイル名取得したパケット情報を出力するファイル名を指定する。このオプションを指定すると,取得したパケット情報を解析せずに,指定したファイルに出力する。パケット取得後,「-r」オプションを使って解析した情報を標準出力に表示することもできる。ファイル名に「-」 を指定した場合,取得したパケットは標準出力に出力される。
-r ファイル名あらかじめ「-w」オプションを使って作成したファイルからパケット情報を読み込む。ファイル名に「-」を指定した場合,取得したパケットは標準入力から読み込まれる。
-F ファイル名フィルタリングの条件式を,指定したファイルから読み込む。あらかじめファイルに条件式を記述しておき,tcpdump 実行時にこのオプションで指定して読み込んでパケットのフィルタリングを実行することができる。このオプションを指定した場合,コマンド・ラインで指定した条件式があっても無視される。
条件式パケットをフィルタリングするための条件式を指定する。「-F」オプションを指定している場合,ここで指定した条件式は適用されない。

 条件式  

tcpdumpでは,条件式を指定することで,取得するパケットをフィルタリングできる。条件式で指定できる項目は多数あるが,ここでは比較的頻繁に利用する項目のみ紹介する。

host IPアドレス | ホスト名フィルタリングの対象とするホストをIPアドレスまたはホスト名を指定する。
port ポート番号フィルタリングの対象とするポート番号を指定する。
net ネットワーク・アドレスフィルタリングの対象とするネットワーク・アドレスを指定する。hostを使った場合と違い,その範囲にある複数のホストを対象に指定できる。
ip proto プロトコル名フィルタリングするプロトコル名を指定する。プロトコル名の部分には,数値もしくは「icmp」,「igrp」,「udp」,「nd」,「tcp」のいずれかを指定する。
src送信元をフィルタリングの対象とすることを指定する。
dst送信先をフィルタリングの対象とすることを指定する。

例えば,送信元ホストのIP アドレスが192.168.100.1のパケットのみを取得したい場合の条件式の指定例は次の通り。

tcpdump src host 192.168.100.1

条件式では,複数の項目同士を論理条件で指定することも可能である。使える論理条件は,否定(!またはnot),結合(&&またはand),択一(||またはor)。例えば,論理条件を使って,送信元ホストのIPアドレスが192.168.100.1でかつ,ポート番号が 80 番のパケットのみ取得する場合の指定例は以下のようになる。

tcpdump src host 192.168.100.1 and port 80


 使用例:パケットを取得しファイルに保存する(クリックで詳細表示)  
tcpdump -w ファイル名