名前
tcpdump - ネットワークのトラフィックをダンプする書式
tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ]説明
tcpdump は真偽値の 条件式 に一致するネットワークインターフェイス上のパケットのヘッダを表示する。 nit か bpf を用いる SunOSの場合: tcpdump を動作させるためには /dev/nit か /dev/bpf* に読み込み権限を持っている必要がある。 dlpi を利用する Solaris の場合: 仮想ネットワークデバイス、たとえば /dev/le といったものに読み込み権限を持っている必要がある。 dlpi を利用する HP-UX の場合: 実行者が root であるか、または root に setuid してインストールされている必要がある。 snoop を用いる IRIX の場合: 実行者が root であるか、または root に setuid してインストールされている必要がある。 Linux の場合: 実行者が root であるか、または root に setuid してインストールされている必要がある。 Ultrix および Digital UNIX の場合: まず、スーパーユーザが pfconfig(8) を用いて無差別透過モード(promicuous-mode)を有効にする必要がある。 その後は一般ユーザが tcpdump を実行可能である。 BSD の場合: /dev/bpf* に対する読み込み権限が必要。オプション
- -a
- ネットワークとブロードキャストアドレスを DNS 名に変換する。
- -c
- count 個のパケットを受信したのちに終了する。
- -d
- コンパイルされたパケットマッチングコードを人間が読める形式で標準出力にダンプし、終了する。
- -dd
- パケットマッチングコードを C 言語の一部として利用可能なかたちでダンプする。
- -ddd
- パケットマッチングコードを 十進数でダンプする(count が先行する)。
- -e
- 各ダンプ行にリンクレベルヘッダを表示する。
- -f
- 「外部の」インターネットアドレスをシンボルではなくて数値で表示する (このオプションは馬鹿な Sun の yp サービスを迂回することを意図している — Sun の yp サービスはローカルではないインターネットアドレスを変換しようとすると 永久に動作が停止してしまうバグがある)。
- -F
- フィルター条件式の指示入力として file を用いる。 この後ろにコマンドラインで条件式による指示が与えられても無視する。
- -i
- interface を監視する。 指示のない場合は tcpdump はシステムのインターフェイスのリストから 最も小さい番号で有効になっているもの(但しループバックは除く)を探し出す。 指示されたインターフェイスが存在しない場合はもっとも近いものが選択される。
- -l
- 標準出力をバッファリングする。データを蓄積しながら監視する場合に有効で
ある。使用例:
- -n
- アドレス(ホストアドレス、ポート番号など)を名前に変換しない。
- -N
- ホストのドメイン名を表示しない。 つまりこれを使用した場合 tcpdump は``nic.ddn.mil'' と表示するかわりに ``nic'' と表示する。
- -m
- SMI MIB モジュールをファイル module から読み込む。 複数の MIB モジュールを読み込む目的で、 このオプションを複数回使用することも出来る。
- -O
- パケットマッチングコードオプティマイザを停止する。 これはオプティマイザのバグを疑っている場合にのみ有益である。
- -p
- 無差別透過モードを 利用しない。しかしながら、他の理由でインター フェイスが無差別透過モードになってしまうこともあることに注意すること。 このため `-p' オプションは `ether host {loca-lw-addr} or ether broadcast' の省略形としては使用できない。
- -q
- すばやい(というか静かな)出力。限定されたプロトコルの情報しか出力しないので、出力行は短いものとなる。
- -r
- パケットを(-w オプションで作成した) fileから読み込む。 fileとして ``-'' を指定した場合には標準入力が利用される。
- -s
- デフォルトの 68 バイト(SunOS の NIT では最小は実際には 96 バイト)に代わって snaplen バイトをおのおののパケットから取り出し利用する。 IP, ICMP, TCP, UDP については 68 バイトあれば十分だが、ネームサーバや NFS の情報には足りないかもしれない(後述)。 snapshot 制限のために後ろが切り捨てられたパケットは出力時に``[| proto]'' の形式で示される。 ここで proto は切り捨ての生じたレベルに対応するプロトコルの名前である。 大きな snapshot を取ろうとするとパケットを処理する時間は増加し、またこちらのほうが重要だが、バッファに溜めることができる量が減少してしまう点に注意すること。 すなわちパケットが失なわれる可能性もある。プロトコルの情報が得られる必要最小限の snaplen とすること。
- -T
- "expression"(条件式) で選択されたパケットに指示された type での翻訳を指示する。現在有効な type は rpc (Remote Procedure Call)、 rtp (Real-Time Applications protocol)、 rtcp (Real-Time Applications control protocol)、 snmp (Simple Network Management Protocol), vat (Visual Audio Tool)、 wb (distributed White Board)。
- -R
- ESP/AH パケットが古い定義(RFC1825 〜 RFC1829)に従っていると仮定する。 このオプションが指定されると、 tcpdump は relplay prevention フィールドを表示しない。 ESP/AH の定義にはプロトコルバージョンフィールドがないので、 tcpdump は ESP/AH プロトコルのバージョンを推論することが出来ない。
- -S
- TCP シーケンス番号を相対値ではなくて絶対値で表示する。
- -t
- ダンプ行に時間情報を表示しない。
- -tt
- ダンプ行に表示する時間情報を整形しない。
- -v
- (ちょっとだけ)詳細な出力。IP パケットにおける 生存時間(TTL) やサービスの種類の情報などを表示する。
- -vv
- もっと詳細な出力。NFS応答パケットにおける付加フィールドなどを表示する。
- -vvv
- さらに詳細な出力。 例えば、telnet SB ... SE オプションは全て表示される。 -X オプションも指定されると、telnet オプションは 16 進表示でも表示される。
- -w
- パケットを解析、表示するかわりに生のまま file に書き出す。 このファイルはあとで -r オプションを用いれば表示することができる。 file として `-' を指示すると標準出力を用いる。
- -x
- (リンクレベルヘッダを除く)すべてのパケットを 16 進で表示する。パケット全体と snaplen バイトの小さい方だけを表示する。
- -X
- 16 進表示されるときに、 ASCII 文字も表示する。 従って、 -x オプションもセットされると、パケットは 16 進と ASCII 文字の両方で表示される。 これは新しいプロトコルを解析するときに非常に便利である。 -x オプションが設定されていなくても、 パケットの部分によっては 16 進と ASCII 文字の両方で表示されることもある。
- expression(条件式)
ダンプするパケットの種類を選択する。
expression
が与えられないときは、ネットワーク上のすべてのパケットをダンプする。
そうでなければ、
expression が`true'(真)
となるパケットだけをダンプする。
expressionは一つ以上の
primitive(要素)
から成る。要素は一つ以上の修飾子を先行する一個の
id
(名前でも番号でもよい)である。修飾子には三つの種類がある:
は
の省略であり、これは
とは違う。 tcpdump に渡す条件式は都合のよいように、単一としても複数としてもよい。 一般にシェルのメタキャラクタを含むような条件式の場合は単一のクオートした引数として渡すのがよい。 複数の引数は評価の直前に空白で結合される。
- type
- 修飾子は id名または id 番号が指すものの種類を示す。利用可能なものは host, net, port である。例: `host foo'、`net 128.3'、`port 20'。 type 修飾子が無い場合は、 host が指示されているものとみなす。
- dir
- 修飾子は id に向けて、または id へ、のどちらかあるいは両方の通信方向を特定する。方向として指示できるのは src, dst, src or dst, src and dst である。例、 `src foo'、`dst net 128.3'、`src or dst port ftp-data'。 dir 修飾子が指定されない場合は src or dst が指示されているものとみなす。`null' リンク層(すなわち slip のよう なポイントツーポイントプロトコル)においては、方向を指定する修飾子として inbound と outbound も利用可能である。
- proto
- 修飾子は一致する特定のプロトコルに制限する。利用可能なプロトコルは以下の通り: ether, fddi, mopdl, ip, ip6, arp, rarp, decnet, lat, sca, moprc, mopdl, icmp, icmp6, tcp, udp。 例: `ether src foor'、`arp net 128.3'、`tcp port 21'。 proto 修飾子が指示されない場合は type と矛盾しない範囲で全てのプロトコ ルが指示されているものとみなす。 例: `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' を意味する。
- dst host host
- パケットの IPv4/v6 ディスティネーションフィールドが host であるとき真。アドレスでも名前でもよい
- src host host
- パケットの IPv4/v6 ソースフィールドが host であるとき真。
- host host
- パケットの IPv4/v6
ソースまたは IP/v4/v6
ディスティネーションフィールドが
host であるとき真。
上記の各 host
を示す条件式には
ip、 arp、rarp、ip6
のいずれかを付加してもよい。
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
ではないときのこと。
host
は名前であり、また
/etc/hosts と /etc/ethers
の両方に記載されていなければならない
(この条件式は host / ehost
それぞれを名前か番号で記述する
ether host ehost and not host host
と同等である)。 この文法は今のところ IPv6 を有効にした設定では正しく動作しない。
- dst net net
- パケットの IPv4/v6 ディスティネーションアドレスが net ネットワークを 含んでいるときに真。 net は/etc/networks に記載される名前かネット ワーク番号である( networks(4) を参照)。
- src net net
- パケットの IPv4/v6 ソースアドレスが net ネットワークのものであるときに真。
- net net
- パケットの IPv4/v6 ソース/ディスティネーションアドレスが net ネットワークであるときに真。
- net net mask mask
- IP アドレスが netmask でマスクして net に一致するときに真。 src か dst で修飾してもよい。 この文法は net が IPv6 のときには不正であることに注意。
- net net/len
- IPv4/v6 アドレスが len ビットのnetmask でマスクして net に一致するときに真。 src か dst で修飾してもよい。
- dst port port
- パケットが ip/tcp か ip/udp か ipv6/tcp か ipv6/udp である場合で、 行き先の port 番号が port であるときに真。 Port は番号の数値か /etc/services による名前を利用できる( tcp(4P) と udp(4P) を参照のこと)。名前が利用されている場合は port 番号と protocol の両方で照合される。 番号か多重に定義されている名前が利用されている場合は port 番号だけが照合される (例: dst port 513 は tcp/login と udp/who の両方の通信を表示するし、 port domain は tcp/domain と udp/domain の両方を表示する)。
- src port port
- パケットが port 番号のポートをソースにしているとき真。
- port port
- パケットのソースかディスティネーションポートが
port であるとき真。
この port
を指定する条件式は
tcp と udp
のキーワードを付加してもよい:
tcp src port port
は port をソースとする tcp のパケットのみに一致する。
- less length
- パケットが length
以下のときに真。
これは下記と同じ:
len <= length.
- greater length
- パケットが length
以上のときに真。
これは下記と同じ:
len >= length.
- ip proto protocol
- パケットが protocol 型のプロトコルの IP パケット( ip(4P) を参照)のものであるとき真。 protocol として利用できるのは数値と icmp、 igrp、udp、nd、tcp である。 tcp、udp、 icmp はキーワードでもあるので、バックスラッシュ(\)でキーワード として解釈されるのを回避する必要がある。C-Shell では \\ を使う。 この要素はプロトコルヘッダチェインを追跡しないことに注意。
- ip6 proto protocol
- パケットがprotocol型の IPv6 パケットであるときに真。 この要素はプロトコルヘッダチェインを追跡しないことに注意。
- ip6 protochain protocol
- パケットが IPv6
パケットであり、
そのプロトコルヘッダチェインの中に
protocol型のプロトコルヘッダがある場合に真。
例えば、
は プロトコルヘッダチェインに TCP プロトコルを持つ IPv6 パケットに一致する。 パケットには、例えば認証ヘッダ、ルーティングヘッダ、 hop-by-hopヘッダなどがIPv6 ヘッダと TCP ヘッダの間に含まれるかもしれない。 この要素が作り出す BPF コードは複雑で、 tcpdumpの BPF 最適化コードで最適化できない。 そのため、少し遅いかもしれない。
- ip protochain protocol
- ip6 protochain protocol と同様だが、これは IPv4 のためのものである。
- ether broadcast
- パケットがイーサネットのブロードキャストであるとき真。ether はなくてもよい。
- ip broadcast
- パケットが IP ブロードキャストパケットであるとき真。これは全て 0 と 全て 1 の両方のブロードキャスト形式に対応し、さらにサブネットマスクにも対応している。
- ether multicast
- パケットがイーサネットのマルチキャストであるとき真。ether はなくて もよい。これは ` ether[0] & 1 != 0'の省略記法である。
- ip multicast
- パケットが IP のマルチキャストであるとき真。
- ip6 multicast
- パケットが IPv6 マルチキャストパケットであるとき真。
- ether proto protocol
- パケットが ether の protocol 型のものであるとき真。 protocol には番号か ip、ip6、arp、rarp の名前が利 用可能。これらの識別子はキーワードでもあるので、バックスラッシュ(\)で キーワードとして解釈されるのを回避する必要がある。 [ FDDI (たとえば ` fddi protocol arp')の場合、プロトコルの識別方法は 802.2 Logical Link Control (LLC) ヘッダーによる。それは通常は FDDI ヘッダーの先頭に置かれている。 tcpdump は プロトコル識別子で フィルターする場合に、全ての FDDI パケットは LLC ヘッダーを持っていて、 その LLC ヘッダーは SNAP と呼ばれる形式になっているものとみなす。 ]
- decnet src host
- DECNET においてソースアドレスが``10.123''のようなアドレスや DECNETのホ ストネームの形式で指示される host と一致するとき真。[DECNETのホストネーム形式は DECNETに接続された ultrix システムにおいてのみ利用可能である。]
- decnet dst host
- DECNETにおいてディスティネーションアドレスが host に一致するとき真。
- decnet host host
- DECNETにおいて、ソースまたはディスティネーションアドレスが host に一致するときに真。
- ip, ip6, arp, rarp, decnet
- 下記において:
ether proto p
p をそのいずれかのプロトコルとするのと同等である。
- lat, moprc, mopdl
- 下記において:
ether proto p
p をそのいずれかのプロトコルとするのと同等である。 tcpdump はこれらのプロトコルの解析方法は正確には知らない点に注意 すること。
- tcp, udp, icmp
- 下記において:
ip proto pip6 proto p
p をそのいずれかのプロトコルとするのと同等である。
- expr relop expr
- 関係式が成り立てば真。relop(演算子)は
>、<、>=、<=、=、!=
のいず
れか一つであり、
expr(表現)
は整定数による数値表現
(表現方法は標準 的な
C
の文法にしたがう)、標準的な二項演算子[+、-、*、/、&、|]、長さ演算子、パ
ケットデータアクセス演算子のいずれか。パケット内のデータに対して適用するにはこのように記述する:
proto [ expr : size ]
proto は ether、fddi、ip、arp、rarp、tcp、udp、icmp、ip6 のいずれかで 操作対象のプロトコル層を指示する。 tcp, udp とその他の上位プロトコル層は IPv4 でのみ利用でき、 IPv6では利用できないことに注意。(これは将来修正されるだろう) 指示されたプロトコル層についてのバイトオフセットは expr で指定する。 size を指示する場合は注目するフィールドでのバイト数で指示するが、 それは one、two また four のいずれかを用いる。指示のない場合は one で あるとみなす。長さ演算子はキーワード len で示され、パケット長を与える。 たとえば、` ether[0] & 1 != 0'という条件式はすべてのマルチキャスト による通信をとらえる。` ip[0] & 0xf != 5' という条件式はすべてのオ プション付きの IP パケットをとらえる。` ip[6:2] & 0x1fff = 0'はフラ グメント化されていないデータグラムか 0 番の(最初の)フラグメントだけを表示する。 なお、この条件は tcp と udp への適用を暗示している。さら に tcp[0] は TCP ヘッダ の最初のバイトを意味するが、フラ グメントの先頭のバイトではありえない。
- 括弧でグループ分けする要素と演算子(括弧はシェルにとっても特別な意味を持つのでたぶんエスケープしなければならないだろう)。
- 否定 (`!' or `not').
- 結合 (`&&' or `and').
- 択一 (`||' or `or').
not host vs and ace
は
not host vs and host ace
の省略であり、これは
not ( host vs or ace )
とは違う。 tcpdump に渡す条件式は都合のよいように、単一としても複数としてもよい。 一般にシェルのメタキャラクタを含むような条件式の場合は単一のクオートした引数として渡すのがよい。 複数の引数は評価の直前に空白で結合される。
例
ホスト sundown にかかわる全ての入出力パケットを表示する:tcpdump host sundown
tcpdump host helios and \( hot or ace \)
tcpdump ip host ace and not helios
tcpdump net ucb-ether
tcpdump 'gateway snup and (port ftp or ftp-data)'
tcpdump ip and not net localnet
tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'
tcpdump 'gateway snup and ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
tcpdump 'icmp[0] != 8 and icmp[0] != 0"
出力形式
tcpdump の出力はプロトコルに依存する。下記は大部分の様式の簡単な解説と例である。O ctcp * A+6 S+49 I+6 3 (6)
arp who-has csam tell rtsg arp reply csam is-at CSAM
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
RTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM
src > dst: flags data-seqno ack window urgent options
rtsg.1023 > csam.login: S 768512:768512(0) win 4096 <mss 1024> csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024> rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1
actinide.who > broadcast.who: udp 84
のような形式である。src > dst: id op? flags qtype qclass name (len)h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
のような形式である。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)
src.xid > dst.nfs: len op args src.nfs > dst.xid: reply stat len op resultssushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150
sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388
src.sport > dst.dport: rx packet-type src.sport > dst.dport: rx packet-type service call call-name args src.sport > dst.dport: rx packet-type service reply call-name argselvis.7001 > pike.afsfs: rx data fs call rename old fid 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs > elvis.7001: rx data fs reply rename
番号 名前 1.254 ether 16.1 icsd-net 1.254.110 ace
net.host.port 144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2
icsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186
jssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002
(frag id:size@offset+) (frag id:size@offset)
arizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560
hh:mm:ss.frac
関連項目
traffic(1C), nit(4P), bpf(4), pcap(3)著者
原著者は: Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. 最新版は tcpdump.org によって管理されている。 IPv6/IPsec のサポートは WIDE/KAME プロジェクトによって追加された。 このプログラムは Eric Young の SSLeay ライブラリを特定の設定の元に使用している。バグ
問題点、バグ、質問、拡張のお願いなどは、以下のアドレスに送ってほしい。 ソースコードの寄贈などは以下のアドレスへ送ってほしい。 NIT は外へ出ていく通信は見ることができない。BPF はそれが可能である。後者の利用を推奨する。 用途によっては、IPフラグメントを再構築したり、上位プロトコルの長さを計算するくらいのことは必要となるだろう。 ネームサーバの逆引き要求は正確に表示できない。(空の)質問はむしろ回答の 中に含まれる要求として表示される。逆引き要求にはバグがふくまれていて、 それを修正するのは tcpdump ではなくてネームサービスの方であるべきと考 えている人もいる。 アップルの EtherTalk の DDP パケットは KIP DDP パケットのように容易に dump できるはずだが、行なわない。たとえ ethertalk を扱おうという気になっ ても(なってないが)、LBLが ネットワーク上のethertalk へのアクセスを許さ ないので、コードのテストができないのだ。 夏時間に切り替わるときにパケットトレースを行なっていると時間がずれてし まう(時間の変更は無視される)。 FDDI ヘッダに対するフィルタの条件式はすべての FDDI パケットがイーサネット のパケットをカプセル化しているものとみなして適用される。 これは、IP,ARP と DECNET PhaseIV については正しく動作するが、 ISO CLNS のようなプロトコルではうまくいかないだろう。 それゆえにフィルターは条件式に一致しないようなパケットをあやまって あつかってしまうかもしれない。 ip6 proto はヘッダチェインを追跡するべきだが、今のところそうはなっていない。 tcp や udp もヘッダチェインを追跡するべきである。 tcp[0]のようなトランスポート層ヘッダに対する算術表現は、 IPv6 パケットに対してはうまく働かない。 IPv4 パケットに対してのみ働く。30 June 1997 |