tcpdump(8)
Please send me a comment.
名称
tcpdump - ネットワーク上のトラフィックデータをダンプします
書式
tcpdump [ -deflnNOpqStvx ] [ -c count ] [ -F file ]
[ -i interface ] [ -r file ] [ -s snaplen ]
[ -w file ] expression
解説
tcpdumpは、オプションで指定されたネットワークインタフェ ー
ス上で取得可能なパケットのヘッダを出力します。 SunOS: tcp-
dump は、スーパユーザの権限で実行 す る か、root 権 限 の
setuid ビットを立てて実行して下さい。 Ultrix: スーパユーザ
が、 pfconfig(8) を用いることでpromiscuous-modeオ ペ レ ー
ショ ンを許可した場合、どのユーザもtcpdumpの起動を行なえま
す。 BSD: /dev/bpf0 その他の属性を用いることで、アクセスを
制御します。
オプション
-c countで指定した数のパケットを受信した後に、プログラ
ム終了します。
-d 解釈されたパケットマッチングコードを標準出力にダ ン
プして、停止します。
-e 各 ダ ン プ行ごとに、リンクレベルのヘッダを出力しま
す。
-f 外部ホストのIPアドレスについては、シンボルでなく 数
値で表示します。 (本オプションは、Sun の ypサーバに
重大な障害が発生するのを回避することを意図 し て ま
す。-- 通常は、Sun の ypサーバは、ローカルに存在し
ない IPアドレスを永久に変換しつづけてハ ン グ し ま
す。)
-F フィ ルタの表現として、fileに記述してある内容を用い
ます。コマンドラインで指定された追加表現は、無視 さ
れます。
-i interfaceで指定されたインタフェースをLISTENします。
指定されない場合には、tcpdumpはシステムインタフェー
ス リストの中で最も小さい番号のものを検索し、監視す
るインタフェースとして設定します(この場合、ル ー プ
バッ クインタフェースは検索されるインタフェースには
入りません)。この動作は、最初にインタフェースが選択
された時点で終了します。
-l 標 準 出 力行をバッファリングします。データをキャプ
チャリング(捕捉)しつつ、そのデータを見たい 場 合 に
は、本オプションは有効です。例えば
``tcpdump -l | tee dat'' や ``tcpdump -l >
dat & tail -f dat'' のように使用します。
-n アドレス(IPアドレスやポート番号など)のシンボルへ の
変換をしません。
-N ホ ス ト 名のうち、ドメイン名の表示をしません。例え
ば、本オプションを指定して``nic.ddn.mil''との間の情
報 をやりとりする場合には、``nic.ddn.mil'' とは表示
されず、かわりに``nic''とだけ表示します。
-O パケットマッチングコードのオプティマイザを走行さ せ
ま せん。本オプションは、オプティマイザ中のバグを疑
う場合にのみ有効なものです。
-p ネットワークインタフェースを、promiscuous-modeに 設
定 しません。注意しなければならない点は、ネットワー
クインタ フェ ー ス は、 何 ら か の 理 由 に よ り
promiscuous-modeに 設定されることもあり得るというこ
とです。ゆえに、`-p' オ プ ショ ン は、ether host
{localhost}もしくは broadcastのために、短縮して使う
ことが出来ません。
-q 高速に(省略した)出力を行ないます。出力する行を短 く
す る た めに、通常出力されるプロトコルインフォメー
ションの一部は出力されません。
-r パケットを、fileで指定したファイル(-wオプションで作
成 されます)から読み込みます。fileとして``-''が指定
された場合は標準入力からのデータが用いられます。
-s 各パケットから、snaplenだけのデータを取得します。無
指 定時の取得データ長は、68バイトです。68バイトとい
うデータ長は、IP,ICMP,TCP,UDPのパケットを取得する分
には十分ですが、ネームサーバやNFSのパケットについて
はプロトコル情報を切り詰めなければなりません(これに
つ い て は、 以後の説明を参照して下さい)。スナップ
ショットが限られた量しかとれずに切り詰めら れ た パ
ケッ トは、出力に``[|proto]''という文字列がいっしょ
に表示されます。protoの部分には、切り詰められたプロ
ト コルレベルの名前が入ります。注意しなければならな
いのは、大きなスナップショットを使う場合には、そ れ
だ けパケット処理の時間がかかるということと、パケッ
トバッファリング用のバッファの量が減るということ で
す。 このことは、パケットの消失が発生しうることを意
味します。snaplenの大きさを、必要なパケットの情報を
取 得するための必要最小限の大きさにとどめるようにし
てください。
-S TCPシーケンス番号を相対番号ではなく、絶対番号で出力
します。
-t 各ダンプ行のタイムスタンプを出力しません。
-tt ア ンフォーマット状態のタイムスタンプを各行ごとに出
力します。
-v (すこしではありますが)出力情報を増やしま す。 例 え
ば、IPパ ケット中の TTLや、サービス型の情報を出力し
ます。
-w 受信した生パケットを、fileで指定したファイルに出 力
し ま す。 本 オ プ ショ ンを用いて取得したパケット
は、-rオプションを用いることで情報を見ることがで き
ま す。file で 指定するファイル名が ``-'' の場合に
は、標準出力を用います。
-x リンクレベルヘッダを除いた各パケットの内容を16進 出
力します。パケットサイズが snaplen バイトより小さい
場合にはパケットの全部の内容を、それ以外の 場 合 に
は、 snaplen バイト分のデータをパケットごとに出力し
ます。
expression
ダンプするパケットを選択します。expressionが指定 さ
れ ない場合には、ネットワーク上のすべてのパケットが
ダンプ対象 に な り ま す。 そ れ 以 外 の 場 合 に
は、expressionの 条件が真になるパケットのみダンプし
ます。
expressionは、1つ以上の プリミティブから成り立ち ま
す。 プ リミティブは通常、1つ以上のクオリファイアに
よって宣言される id (名前もしくは番号)から成り立 ち
ます。クオリファイアには、3つの種類があります。
type クオリファイアは、id名や番号が参照するものの
種類を指します。type には host、 net そし て
port が あ ります。例えば、`host foo', `net
128.3', `port 20'のように用います。 typeクオ
リファイアが指定されない場合には、 host が指
定されたものとみなされます。
dir クオリファイアは、パケットが id へ出ていく方
向か、 id から来る方向か、もしくはその両方か
という、特定の転送方向を指定します。指定可能
な 方 向は、 src、 dst、 src or dst 、そして
src and dst の4つです。例え ば、`src foo'、
`dst net 128.3'、 `src or dst port
ftp-data'のように指定します。もしdirク オ リ
ファ イアが指定されない場合には、 src or dst
が指定されたものとみなします。
proto クオリファイアは、特定のプロトコルに一致する
パケットのみに制限します。 protoに指定可能な
ものは、 ether、 ip、 arp、 rarp、 tcp、そし
て udp で す。例えば`ether src foo'、 `arp
net 128.3'、 `tcp port 21'のように使用されま
す。 もしprotoクオリファイアが指定されない場
合には、上記のプロトコルのうち、適用可能なも
の す べてが指定されたものとみなします。例え
ば`src foo'は、 `(ip or arp or rarp) src
foo'と、 `net bar'は `(ip or arp or rarp)
net bar' と同義であり、また`port 53' は
`(tcp or udp) port 53'と同義です。
上記に追加して、特別なプリミティブキーワードがあ り
ます。そのキーワードは gateway、 broadcast、 less、
greater、そして、算術演算表現です。これらのす べ て
は、以下のように記述されます。
よ り 複 雑なフィルタの表現は、プリミティブの結合に
and、 or、そして not を用いることで実現されます。例
え ば、`host foo and not port ftp and not port ftp-
data' は、「foo が送受信するパケットのうち、ftp ポ
ー トおよび ftp-data ポートをたたかないもの」と解釈
されます。タイプ量を少なくするために、同一のクオ リ
ファ イ ア リ ス トは、省略することが可能です。例え
ば、`tcp dst port ftp or ftp-data or domain'は、
`tcp dst port ftp or tcp dst port ftp-data or tcp
dst port domain'と同じ意味を持ちます。
許可されるプリミティブは、以下の通りです。
dst host host
IPパケットの宛先フィールドがhostで指定したも
の の場合に真となります。 hostでの指定は、ホ
スト名もしくはIPアドレスのどちらかで指定しま
す。
src host host
IPパケットの送信元フィールドがhostで指定した
ものの場合に真となります。
host host
IPパケットの送信元フィールドもしくは宛先フィ
ールドがhostで指定したものの場合に真となりま
す。上記のhostプリミティブの表 現 に は、ip,
arp, or rarpなどを以下のように付加することが
可能です。
ip host host
という表記は、
ether proto \ip and host host
と同じ意味です。 hostが複数のIPアドレスを 持
つ も のであった場合、各アドレスがそれぞれパ
ケットの評価に用いられます。
ether dst ehost
イーサネット パ ケッ ト の 宛 先 ア ド レ ス
がehostだっ た 場 合 に 真 となります。Ehost
は、/etc/ethersに記述された名前もしくはイ ー
サ ネッ トアドレスの値が用いられます (イーサ
ネットアドレスの形式については、 ethers(3N)
を参照して下さい)。
ether src ehost
イ ー サ ネッ ト パ ケッ ト の送信元アドレス
がehostだった場合に真となります。
ether host ehost
イーサネットパケットの送信元アドレスもしくは
宛 先 ア ドレスがehostだった場合に真となりま
す。
gateway host
パケットがhostで指定したアドレスのマシンをゲ
ートウェイとしている場合に真となります。言い
替えると、送信元もしくは宛先のイーサネットア
ド レスがhost で指定され、送信元もしくは宛先
のIPアドレスが指定されるわけではありません。
hostは、/etc/hosts ファイルや /etc/ethers の
中で定義されている名前を指定する必要がありま
す(等価な表現は、
ether host ehost and not host host
で す。 この表現を用いることで、host / ehost
の両方の表記を用いることが可能になります)。
dst net net
パケットの宛先IPアドレスが、netで指定され た
ネットワークに属するものである場合に真となり
ます。netは、アドレス値もしくはネットワー ク
名のいずれかを指定可能です。
src net net
パ ケットの送信元IPアドレスが、netで指定され
たネットワークに属するものである場合に真とな
ります。
net net
送 信 元IPア ド レ ス もしくは宛先IPアドレス
がnetで指定されたネットワークに属するもの で
ある場合に真となります。
dst port port
パ ケッ ト がip/tcp(TCPパ ケッ ト)も し く
はip/udp(UDPパケット)であり、宛先ポート番 号
がportの 場合に真となります。 portで指定され
る ポ ー ト 番 号 は、 直 値 指 定 も し く
は、/etc/servicesで 定義されているサービス名
で指定可能です( tcp(4P) や udp(4P) を参照 し
て 下さい)。ポート番号がサービス名にて指定さ
れた場合、ポート番号とプロトコルがチェック対
象になります。即値によるポート番号指定や、あ
いまいなサービス名が指定された場合には、ポー
ト 番 号 の み がチェック対象となります(例え
ば、dst port 513 は、tcp/login と udp/who の
両 方 を 指 し 得 ま す し、port domain
は、tcp/domain と udp/domain の両方を指し 得
ます)。
src port port
パケットがportで指定した送信元ポート番号を保
持している場合に真となります。
port port
パケットの送信元ポート番号もしくは宛先ポート
番号がportの場合に真となります。上記のポート
番号の指定については、すべてキーワードtcp も
しくは udpを用いて、ある程度候補を絞り込むこ
とが可能です。例えば、
tcp src port port
と指定した場合には、tcpパケットのみが条件 一
致の評価対象となります。
less length
パケットがlengthで指定した長さ以下の場合、真
となります。これは、
len <= length
の指定と等価です。
greater length
パケットがlengthで指定した長さ以上の場合、真
となります。これは、
len >= length
と等価です。
ip proto protocol
パ ケッ トが protocol で指定したプロトコル型
のIPパケット( 詳細は ip(4P) を参照して 下 さ
い)の場合に真となります。 protocolは、数字も
しくはicmp, udp, nd, or tcp のいずれかの名前
が 指 定 可能です。注意することは、tcp, udp,
icmp の各識別子はもキーワードの1つで あ り、
バックスラッシュ(\)(C-shellでは\\)を用いてエ
スケープしなければならない点です。
ether broadcast
パケットがイーサネットブロードキャストパケッ
トの場合に真となります。ether キーワードは、
オプショナルなものです。
ip broadcast
パケットがIPブロードキャストパケットの場合に
真 となります。このチェックでは、オール1とオ
ール0の新旧のブロードキャストアドレスの両 者
を、 そ してローカルサブネットマスクを含めて
チェックします。
ether multicast
パケットがイーサネットマルチキャストパケット
の場合に真となります。ether キーワードは、オ
プショナルなもの で す。 な お、 こ の 指 定
は、`ether[0] & 1 != 0'の短縮系です。
ip multicast
パケットがIPマルチキャストパケットの場合に真
となります。
ether proto protocol
パケットがprotocolで指定した ether 型を持 つ
場 合に真になります。 protocolは、数字もしく
はip, arp, rarpのような名前を指定可能で す。
注意しなければならないのは、これらの識別子は
キーワードでもあり、バックスラッシュ (\)でエ
スケープされなければならない点です。
ip, arp, rarp
ether proto p
の 短縮形です。pの部分には、上記のいずれかの
プロトコル名が入ります。
tcp, udp, icmp
ip proto p
の短縮形です。pの部分には、上記のいずれか の
プロトコル名が入ります。
expr relop expr
>, <, >=, <=, =, != のいずれかがrelopに当て
はまり、exprの部分に定数や通常のビット 演 算
子[+, -, *, /, &, |]、データ長の演算子、そし
て特殊なパケットデータの演算子などからなる算
術表現が入って、その関係が真の場合に真となり
ます(表現の解釈は、標準のC言語の文法に準じま
す)。 パケット内部のデータにアクセスするため
には、以下の表現を用います。
proto [ expr : size ]
protoは、ether, ip, arp, rarp, tcp, udp, ,そ
し て icmpのいずれかであり、またインデクス操
作にてプロトコル層であることを示せるものが入
ります。プロトコル層からの相対バイトオフセッ
トは、exprで指定可能です。 sizeはオプショ ナ
ルであり、取得するフィールドのデータ長を表し
ます。このデータ長としては、1,2,4のいずれ か
を 指 定することが可能であり、デフォルトでは
1が指定されたものとみなされます。キ ー ワ ー
ドlenで 示されるデータ長の演算では、パケット
長が与えられます。
例えば、`ether[0] & 1 != 0'は、全てのマル チ
キャ ストパケットを捕捉します。 `ip[0] & 0xf
!= 5'という表現は、すべての オ プ ショ ン 付
きIPパ ケッ ト を 捕 捉 す る ことを意味しま
す。`ip[2:2] & 0x1fff = 0'という表現は、フラ
グメントのないデータグラムパケットもしくはフ
ラグメントデータグラムのうち、フラグ0のも の
を選んで捕捉します。本チェックは、tcp および
udpのインデクス操作においては、暗黙のうち に
適 用されます。例えば、tcp[0]は常にTCPヘッダ
の先頭バイトを指し、決してフラグメントの間の
パ ケッ トの先頭バイトを指すものではありませ
ん。
プリミティブは、組み合わせて使用することが 可 能 で
す。
挿 入されるプリミティブや演算子のグループ(挿
入は、シェルから見ると特殊な操作であり、その
部分はエスケープされる必要があります)
否定 (`!' or `not').
論理積 (`and').
論理和 (`or').
否 定は、最も高い演算優先度を持ちます。論理話と論理
積は、同じ演算優先度を持ち、左から右へ評価 さ れ ま
す。 注意しなけれvばならないのは、予約語andを明示す
ることが、論理積の演算の場合には要求されていると い
うことです。
キ ーワードなしで識別子が与えられている場合には、最
も最近用いられたキーワードが付加されているものと 仮
定されます。例えば、
not host vs and ace
は、
not host vs and host ace
の短縮形ですが、
not ( host vs or ace )
と混同してしまいがちなので気をつけましょう。
変 数を表現する引数は、単一の引数もしくは複数の引数
として、tcpdumpはチェックを通しますl。この機能 は、
非 常に便利なものです。一般的に、引数がシェルのメタ
キャラクタを含む場合、その引数をクオートされた単 一
の 引数としてプログラムに引き渡すことが容易だからで
す。複数の引数は、分解される前にスペースで連結さ れ
ます。
使用例
yabuuchiに到達するパケットと、yabuuchiから送信されるパケッ
トのすべてを表示する場合には、以下のように実行します。
tcpdump host yabuuchi
yuko と、hiroshi か yukoと takachanの間のトラフィックを 表
示する場合には、以下のように実行します。
tcpdump host yuko and \( hiroshi or takachan \)
takachanと、yuko以外のホストとの間でやりとりされたIPパケッ
トを表示する場合には、以下のように実行します。
tcpdump ip host takachan and not yuko
ネットワークaquaageの中に存在するすべてのホスト間 の ト ラ
フィックを表示する場合には、以下のように実行します。
tcpdump net aquaage
ゲートウェイikawaを通過するすべての ftp トラフィックを表示
します。 (シェルが括弧を誤って解釈しないよう、イクスプレッ
ションがクオートされていることに注意して下さい)
tcpdump 'gateway snup and (port ftp or ftp-data)'
送信元アドレスと宛先アドレスの両方がローカルネットワーク内
のホストのものでないトラフィックについて表示します。 (他の
ネットワークに対するゲートウェイであり、なおかつそのゲート
ウェイが中継するパケットが、ローカルネットワーク内のホスト
に到達しない場合です)
tcpdump ip and not net localnet
ロ ーカルネットワーク外のホストとの通信において、TCPによる
各通信単位のスタートパケットとエンドパケットを表示す る に
は、以下のように実行します。
tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'
ゲートウェイikawaを中継されるIPパケットのうち、576バイト以
上のものを表示します。
tcpdump 'gateway snup and ip[2:2] > 576'
イーサネット上でブロードキャストもしくはマルチキャストを経
由 し て送られるもの以外のIPブロードキャストもしくはマルチ
キャストパケットを表示するには以下のように実行します。
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
echo リクエスト/リプライ以外の(ping パケット以外 の)全 て
のICMPパケットを表示します。
tcpdump 'icmp[0] != 8 and icmp[0] != 0"
出力形式
tcpdumpの 出力は、プロトコル依存です。以下の説明では、簡単
なパラメータの記述と、おおよそのフォーマットの説明を行ない
ます。
リンクレベルヘッダ
もし'-e'オプションが指定されると、リンクレベルヘッダが出力
されます。イーサネットにおいては、送信元と宛先のアドレス、
プロトコル、そしてパケット長が出力されます。
(N.B.: 以下の記述は、利用者がRFC1144に記述されているSLIP圧
縮アルゴリズムについての知識がある前提で書いてます。)
SLIPによるリンクにおいては、ディレクションイ ン ディ ケ ー
タ``I''が入力方向、``O'' が出力方向)、パケット型、そして圧
縮情報が出力されます。パケット型は、最初に出力されます。パ
ケッ ト型にはip、utcp、そして ctcpの3つがあります。 ip型パ
ケットの場合、多くの情報は表示されません。 TCPパケットの場
合 に は、コネクション識別子がパケット型に続いて出力されま
す。パケットが圧縮されている場合、符号化されたヘッダが出力
されます。特殊な場合は*S+n や *SA+nのように出力されます。n
の箇所には、シーケンス番号(もしくはシーケン ス 番 号 お よ
びack)が 変 更された回数が入ります。特殊な場合でない場合に
は、0回以上の変更について出力され ま す。 変 更 は、U (緊
急(urgent)ポインタ)、W(ウィンドウ)、A(ack)、S(シーケンス番
号)、そしてI(パケットID)を示し、変動量(+n or -n)もしくは新
しい値が付加されます。最後に、パケット内のデータの総量はお
よび圧縮ヘッダ長が出力されます。
例えば、以下の行は、出力方向の圧縮TCPパケットを、暗黙の コ
ネクション識別子とともに表示しています。ackは6変わり、シー
ケンス番号は49変わり、パケット IDは6変わって ま す。 そ し
て、3バイトのデータと6バイトの圧縮ヘッダが本パケットの構成
要素として存在します。
O ctcp * A+6 S+49 I+6 3 (6)
ARP/RARP パケット
arp/rarp パケットの出力からは、要求型とそのアーギュメン ト
を見ることが出来ます。出力形式は、その出力のみで理解可能な
ように作られています。以下に、ホストkarenからホストedoへの
`rlogin'開始時のパケットのサンプルを示します。
arp who-has edo tell karen
arp reply edo is-at EDO
1行目は、ホストkaren が、ホストedoのイーサネットアドレスを
問い合わせる目的でarpパケットを送信していることを意味し ま
す。 ホストedoは、自分自身のイーサネットアドレスを返答して
います(この例では、イーサネットアドレスは大文字で、イン タ
ネットアドレス部は小文字で表記してます)。
tcpdump -nとして起動した場合には、少し冗長になります。
arp who-has 128.3.254.6 tell 128.3.254.68
arp reply 128.3.254.6 is-at 02:07:01:00:01:c4
tcpdump -eとして起動した場合には、最初のパケットはブロード
キャストパケットであり、次のパケットはポイントツーポイント
のパケットであることがわかります。
KAREN Broadcast 0806 64: arp who-has edo tell karen
EDO KAREN 0806 64: arp reply edo is-at EDO
最 初 の パ ケットについては、送信元のイーサネットアドレス
はKARENであり、宛先はブロードキャストアドレス、型フィー ル
ドには16進数の値0806(ETHER_ARP を意味します)が格納されてお
り、総パケット長は64バイトであると表示してます。
TCPパケット
(N.B.:以下の記述は、RFC793に記述されているTCPプロトコル に
ついての知識があることを前提に記述されてます。この知識がな
い場合、本記述とtcpdumpのいずれもあなたには役に立たない で
しょう。)
TCPプロトコル行の一般的な形式は、以下の通りです。
src > dst: flags data-seqno ack window urgent options
src と dstは、それぞれ送信元と宛先のIPアドレスとポート番号
です。flagsの部分には、S (SYN),F (FIN), P (PUSH) ,R (RST)
の 組 合 せ、 も しくは単なる `.' (フラグなし)が入ります。
data-seqnoは、パケット内のデータに含まれるシーケンス番号の
部分が入ります(以下の例を参照して下さい)。 ackは、本コネク
ションの逆方向の次に来るデータパケットに期待されるシーケン
ス 番 号 が入ります。 windowは、本コネクションの逆方向のパ
ケットを格納するバッファサイズが入ります。 urgは、パケット
中 に`urgent'(緊 急)データが格納されていることを示します。
optionsは、例えば<mss 1024>のように、アングルブラケット(大
小記号)でくくられたtcpオプションが入ります。
src、dst、 そしてflagsは、常に表示されます。他のフィールド
は、パケットのTCPヘッダに依存し、表示できる場合だけ表示 さ
れます。
以 下の例は、ホストkarenからホストedoへのrlogin のセッショ
ン開設時のシーケンスの一部です。
karen.1023 > edo.login: S 768512:768512(0) win 4096 <mss 1024>
edo.login > karen.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024>
karen.1023 > edo.login: . ack 1 win 4096
karen.1023 > edo.login: P 1:2(1) ack 1 win 4096
edo.login > karen.1023: . ack 2 win 4096
karen.1023 > edo.login: P 2:21(19) ack 1 win 4096
edo.login > karen.1023: P 1:2(1) ack 21 win 4077
edo.login > karen.1023: P 2:3(1) ack 21 win 4077 urg 1
edo.login > karen.1023: P 3:4(1) ack 21 win 4077 urg 1
最初の行 は、 ホ ス トkarenのTCPポ ー ト1023番 か ら ホ ス
トedoのlogin ポートに対してパケットを送信していることを意
味します。Sは、パケットのSYNフラグが有効になっていることを
意味します。パケットのシーケンス番号は768512番であり、デー
タは含みません。 (これは、`first:last(nbytes)'の表記から判
断できます。この表記は、シーケンス番号firstからlastまで(た
だしlastは含みません)、そしてnbytesのユーザデータを含む と
い うことです。このパケット中のACKは有効でなく、取得可能な
受信ウィンドウサイズは4096バイトであり、1024バイトの最大セ
グメントサイズ要求を行なうオプションが付加されています。
edoは、karenから送られたパケットと類似したパケットを送り返
しますが、 karenの送ったパケット中のSYNに対応したackが含ま
れるところが異なります。karenは、それからkarenはedoのSYNに
対応したACKパケットを返します。 `.'は、S (SYN),F (FIN), P
(PUSH) ,R (RST)のいずれのフラグも立っていないことを意味し
ます。パケットはデータを含まないため、データシーケンス番号
は 入りません。注意しなければならないのは、ackシーケンス番
号は、小さい整数(1)であることです。tcpdumpは、最初 はTCPの
通信を監視し、パケットから取得したシーケンス番号を表示しま
す。通信のサブシーケントパケットについては、現在のパケット
シーケンス番号とサブシーケントパケットの最初のシーケンス番
号の間の差を表示します。このことは、最初に取得した以降のシ
ーケンス番号は、通信データストリームの相対位置として解釈さ
れます(最初の各方向のデータバイトは1です)。`-S'は、本機 能
を無効にし、オリジナルのシーケンス番号を表示します。
6行 目 で は、karenはedoに19バ イ ト の データを送信してま
す(karen -> edoの方向の通信における、2バイト目から20バイト
目 までのデータ)。PUSHフラグが本パケットでは有効になってま
す。 7行目では、edoは、karenから21バイトまでのデータを受け
とっ た旨のレスポンスをkarenに返してます。これらのデータの
ほとんどは、edoの受信ウィンドウを19バイト小さく し て、 ソ
ケットバッファの中に存在します。 edoは、karenに1バイトのデ
ータを送信してます。 8行めと9行めでは、edoは2バイ ト の 緊
急(urgent)デ ータ送信を行なってます。ここでは、両方ともPフ
ラグが有効になってます。
UDP パケット
UDP フォーマットは、以下のrwhoパケットで例示します。
stacklay.who > broadcast.who: udp 84
これは、ホストstacklayのwhoポートがUDPデータグラムを ホ ス
トbroadcast(イ ン タ ー ネッ トブロードキャストアドレス)の
whoポートに対して送信していることを意味します。本パケッ ト
は、 84バイトのユーザデータを含みます。
UDPサ ービスのうち、送信元もしくは宛先のポート番号からサー
ビス種類の判断が可能なものがあります。この場合、さらに上位
レベルのプロトコル情報が出力されます。ドメインネームサービ
ス要求(RFC1034/1035)、そして、Sun RPC呼びだし(RFC1050)を用
いたNFSサービスなどがこの条件に該当します。
UDP ネームサーバーリクエスト
(N.B.:以 下の記述は、RFC1035に記述されているドメインサービ
スプロトコルの知識があることを前提に書かれてます。もしこれ
らの知識がない場合には、以下の記述は未知の言語で書かれてい
るかのように見えるでしょう)
ネームサーバリクエストは、以下のような表示になります。
src > dst: id op? flags qtype qclass name (len)
h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
ホストh2opoloは、helios上のドメ イ ン サ ー バ に 対 し て
ucbvax.berkeley.eduの ホ ス ト 名 に対応するアドレスレコー
ド(qtype=A) を問い 合 わ せ て ま す。 Query-IDは`3'で あ
り、`+'はrecursion desiredフラグが設定されていることを意味
します。Query の長さは37バイトであり、この中 にUDPお よ び
IPの プロトコルヘッダの長さは含みません。Query操作は普通の
操作(uery) であり、opフィールドは無視されます。opが他の い
ずれかであった場合、そのopは`3'と`+'の間に表示されます。こ
れと同様に、qclassは普通のもの(C_IN)であり、無視されます。
他のqclassが入った場合、`A'の後ろに表示されます。
少数の変則的なパケットはチェックの結果、カギカッコで囲まれ
たエクストラフィールドにその結果が表示されます。Queryが 返
答を含む場合、ネームサーバもしくはオーソリティセクション、
ancount, nscount, もしくは arcount が、`[na]'、 `[nn]' 、
も しくは `[nau]'のような形式で表示されます。nは、もっとも
適当なカウント数です。レスポンスビットのいずれかが設定され
ている(AA, RA もしくは rcode)場合、もしくは0でなければなら
ないビットが2バイト目と3バイト目に設定されてい る 場 合 に
は、`[b2&3=x]'が 出 力されます。xは、ヘッダの2バイト目およ
び3バイト目の値を16進で表したものです。
UDP ネームサーバレスポンス
ネームサーバレスポンスの形式は、以下の通りです。
src > dst: id op rcode flags a/n/au type class data (len)
helios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)
helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)
最初の例は、h2opoloからのquery-ID 3 のリ ク エ ス ト に 対
し、heliosが 3つのアンサーレコード、3つのネームサーバレコ
ード、そして7つのオーソリティレコードを持っているパケッ ト
で返答しているというものです。最初のアンサーレコードは、タ
イ プA(ア ド レ ス)で あ り、 そ の デ ー タ はIPア ド レ
ス128.32.137.3で す。 総サイズは、273バイトです。UDPとIPの
ヘッダは表示には含まれません。クラス(C_IN)は、Aレコード で
あ るため、op (Query)およびレスポンスコード(NoError)は、無
視されます。
2つめの例は、heliosがquery-ID 2 のリクエストに対し、存在し
な い ド メ イ ン(NXDomain)の ため返答がないというのととも
に、、1つのネームサーバレコード、そして0個のオーソリティレ
コ ードを含んだレスポンスを返しています。`*'は、authorita-
tive answerビットが設定されていることを示します。返答が な
いため、クラスもしくはデータが出力されます。
他 の フラグキャラクタが現れた場合は、`-'(recursion avail-
able,RA, not set)および`|' (truncated message, TC, set)が
表示されます。 `question'セクションが1つのエントリも含んで
いない場合には、`[nq]' が出力されます。
ネームサーバリクエストおよびレスポンスは、大きくなる傾向に
あり、デフォルトの snaplenの値である96バイトの長さでは、パ
ケットを捕捉してその内容を表示するには少なくなりつつありま
す。もしネームサーバトラフィックの調査を行なおうとするなら
ば、-sオプションを用いて、snaplenを増やして下さい。自分 の
経験上、`-s 128'で十分使い物になります。
NFS リクエスト
Sun NFS (Network File System) リクエストおよびリプライは、
以下のように表示されます。
src.xid > dst.nfs: len op args
src.nfs > dst.xid: reply stat len
vs.e2766 > helios.nfs: 136 readdir fh 6.5197 8192 bytes @ 0
helios.nfs > vs.e2766: reply ok 384
vs.e2767 > helios.nfs: 136 lookup fh 6.5197 `RCS'
最初の行では、ホストvsがIDe2766のトランザクションを送信 し
ます。 heliosに送信してます(送信元ホスト(アドレス)に続く数
字はトランザクション IDであり、ポート番号でないことに注 意
して下さい)。リクエストサイズは136バイトです。ただし、この
サイズには、UDPヘッダおよびIPヘッダのサイズは含みませ ん。
要 求 さ れ て い るオペレーションは、ファイルハンドル(fh)
6.5197を用いた readdir(ディレクトリ読み込み)であり、8192バ
イトが読まれてます。オフセット値は0です。 heliosは`ok'とと
もに、384バイトのデータを送信してます。 (Sun RPC プロト コ
ルのデザインでは、リプライを解釈するのが難しいので、考えな
いことにしてます)
3行めでは、vsはheliosに対し、ファイルハンドル6.5197の ディ
レ クトリ中のファイル`RCS'の検索を要求してます。出力された
データは、オペレーションタイプに依存することに注意して下さ
い。 本形式は、NFSのプロトコルスペックとともに読めば、それ
自身を見れば分かるように意図して作成されています。
NFSリクエストは非常に大きなデータになるため、snaplenを大き
く しないと上記のような出力は得られません。NFSトラフィック
を監視するには、経験的に`-s 192'以上のsnaplenを指定して 下
さい。
KIP Appletalk (DDP in UDP)
UDPデータグラムでカプセル化されたAppletalk DDPパケットは、
カプセル化を解かれ、DDPパケットとしてダンプされま す(全 て
のUDPヘッダ情報は破棄されます)。ファイル /etc/atalk.names
が、Appletalkネッ トワークおよびノード番号をシンボル変換す
るのに用いられます。本ファイルの内容は、以下のように記述さ
れます。
number name
1.254 ether
16.1 icsd-net
1.254.110 ace
最 初の2行は、Appletalkネットワーク名を付与してます。3行め
の内容は、特定のホストの名前を付与してます(ホストは、3オク
テッド目の有無でネットワークと区別されます。ネットワーク番
号は、2オクテッドの数字から、ホスト番号は3オクテッドの数字
か ら構成される必要があります)。数字と名前は、空白文字もし
くはタブ文字で区切られます。 /etc/atalk.names ファイルは、
空 行もしくは、`#'文字で始まるコメント行を含んでもかまいま
せん。
Appletalk アドレスは、以下のように表示されます。
net.host.port
144.1.209.2 > icsd-net.112.220
office.2 > icsd-net.112.220
jssmag.149.235 > icsd-net.2
( もし /etc/atalk.names がないか、ホスト番号及びネットワー
ク 番 号のエントリが /etc/atalk.names 中に存在しない場合に
は、アドレスは数字で表示されます。) 最初の例は、ネットワー
ク番号 144.1 のネットワーク中の209番のノードのNBP(DDP port