メイン モジュール デー
タ構造 ファイルリスト データフィールド グローバル 関連ページ 注意事項
English
- 注意: 本ドキュメントはtcpdumpのメインページから書かれています。オリジナルのバージョンは www.tcpdump.org のサイト内にあります。
wpcap
のフィルタは、宣言型の叙述式に基づいています。フィルタは、フィルタリングの式を含んだASCII文字列です。pcap_compile()
が式を取り込んでそれをカーネルレベルのパケットフィルタに翻訳(コンパイル)します。
条件式はどのパケットがダンプされるかを選択します。expressionが与えられない場合、カーネルレベルのフィルタリングエンジンによって
ネットワーク上の全てのパケッ
トが受け入れられます。それ以外は、式が'true'のパケットだけが受け入れられます。
式は、一つかそれ以上の要素(プリミティブ)で構成されます。要素は通常は、一つかそれ以上の修飾子によって選考されたid
(名前か数値)で構成されています。三つの異なる限定詞があります:
- type
- id名や数値がどんなものを参照しているかを宣言する
修飾子です。可能な型はhost、 net
と portです。例えば、
`host foo'、 `net 128.3'、 `port 20'などです。type修飾子がない場合は、host
だと判断されます。
- dir
- idに向けて、および/またはidから、を特定
する修飾子です。可能な転送先は src, dst, src
or dst, src adn dst です。
例えば、`src foo'、 `dst net 128.3'、 `src or dst port
ftp-data'等になります。dir修飾子がない場合は、src または dst
だと判断されます。null リンクレイヤ(すなわち、SLIPのようなPPPプロトコル)には、inbound と outbound
修飾子が要求された転送先を特定するのに使用されます。
- proto
- 一致する特定のプロトコルに制限する修飾子です。可能なproto はether、 fddi、 tr、 ip、 ip6、 arp、 rarp、 decnet、 tcp、 udp
です。例えば、`ether src foo'、 `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'を意味します。
[`fddi'
は実際には`ether'のエイリアスです。パーサー(構文解析ツール)は、"特定のネットワークインターフェイス上で使用され
るデータリンク層"と解釈してそれらを扱います。FDDIヘッダはイーサネットのようなソースと宛先アドレス、そしてしばしば
イーサネットのようなパケットtypeを包含するのに、これらのFDDIフィールドをイーサネットフィールドに類似しているものと同様にフィルタ出
来ます。FDDIヘッダは他のフィールドも包含しますが、それらをフィルタの条件式中で明示的に名づけることは出来ません。
同様に、`tr' は`ether'のエイリアスです。先ほどのFDDIに関する文章はToken Ringヘッダにも当てはめられます。]
上記に加えて、これらのパターンに当てはまらない特別な要素を示すキーワードがあります。gateway、
broadcast、
less、
greater と、数値による条件式です。これらについては、後述します。
and、
orまたはnotといった、各要素の組み合わせにより、より複雑なフィルタ式が組み立てられます。
例えば、`host foo and not port ftp and not port
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
- パケットのIPv4/v6デスティネーションフィールドがhostであれば真。アドレスでも名前でもどちらでも良い。
- src host host
- パケットのIPv4-v6のソースフィールドがhostであれば真。
- host host
- IPv4/v6のソースかパケットのデスティネーションがhostであれば真。上記のhost式のいずれかは、次に見られる様にip、 arp、 rarp、 か ip6でプリペンドされます:
ip host host
次と同等です:
ether proto \ip and host host
host が複合IPアドレスによる名前であれば、それぞれのアドレスが適合のためにチェックされます。
- ether dst ehost
- イーサネットデスティネーションアドレスがehostであれば真。Ehostはetc/etherからの名前か数値からのいずれかになります
(数
値フォーマットに関しては、ethers(3N)を参照のこと)。
- ether src ehost
- イーサネットソースアドレスがehostであれば真。
- ether host ehost
- イーサネットソースかデスティネーションアドレスのいずれかがehostであれば真。
- gateway host
- パケットがhostをゲートウェイとして使用していれば真。すわなち、イーサネットソースかデスティネーションアドレスがhostで、しか
し、
IPソースも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 netmask
- IPアドレスとnetが特定のnetmaskで一致すれば真。src か dstで修飾される。この構文は
IPv6のnetでは無効である事に注意。
- net net/len
- IPv4/v6アドレスとnetがlenビット幅のネットマスクで一致すれば真。src か dstで修飾さ
れる。
- dst port port
- パケットがip/tcp, ip/udp, ip6/tcp, ip6/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
この場合はソースポートが portであるtcpパケットだけと一致する。
- less length
- パケットの長さが lengthと同等かそれ以下の時に真。これは下記と同等です:
len <= length.
- greater length
- パケットの長さが lengthと同等かそれ以上の時に真。これは下記と同等です:
len >= length.
- ip proto protocol
- パケットがプロトコルタイプprotocolを持つIPパケットの時に真(ip(4P)参照)。Protocol
は数値か次のうちの名前の一つになりえる。 icmp, icmp6, igmp, igrp,
pim, ah, esp, vrrp, udp, tcp。
識別子であるtcp, udp, icmp
もキーワードであり、なおかつそれらはバックスラッシュ(\)、C-shellでは\\によって拡張されなければならないことに注意してください。この要
素はプロトコルヘッダチェインを追跡しません。
- ip6 proto protocol
- パケットが protocol型のプロトコルを持つIPv6パケットの時に真。この要素はプロトコルヘッダ
チェインを追跡しません。
- ip6 protochain protocol
- パケットがIPv6で、そのプロトコルチェインの中にprotocol
型のプロトコルヘッダを持つパケットであれば真。例として
ip6 protochain 6
は、プロトコルヘッダチェインの中に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, atalk,
aarp, decnet, sca, lat, mopdl,
moprc, iso, stp, ipx, netbeui。
これらの識別子はキーワードでもあるので、バックスラッシュ(¥)で回避されなければならないことに注意。
- [FDDI (例えば`fddi protocol arp') と Token
Ring
(例えば `tr protocol arp')の場合、プロトコルの識別方法は、802.2 Logical Link
Control (LLC)
ヘッダによる。通常はFDDI または Token Ring
ヘッダの先頭に置かれています。
- tcpdump
はプロトコル識別子でフィルタする場合に、全てのFDDIパケットはLLCヘッダを持っていて、そのLLCヘッダはSNAPという形式になっているとみな
します。
- 例外として、 iso はLLCヘッダのDSAP
(Destination
Service Access Point) と SSAP (Source Service Access Point)
フィールドをチェックします。 stp と netbeui はLLCヘッダのDSAP をチェックします。 atalk
はOUIとAppletalk etypeでSNAP形式のパケットをチェックします。
- イーサネットの場合、tcpdump は ほぼ全てのプロトコルのEthernet
型フィールドをチェックします。例外として、iso, sap, netbeui
は802.3フレームをチェックしてからFDDIやToken Ringに対してするようにLLCヘッダをチェックします。 atalk
イーサネットフレーム内のAppletalk etypeとFDDIとToeken
Ringに対してするようにSNAP形式パケットの両方をチェックします。 aarp
はイーサネットフレームか802.2SNAPフレームいずれかのAppletalk ARP etypeをチェックします。ipx
はイーサネットフレーム内のIPX
etype、LLCヘッダ内のIPX DSAP、IPXカプセル化LLCヘッダなしの802.3、SNAPフレーム内のIPX
etypeをチェックします。]
- 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, atalk,
aarp, decnet, iso, stp, ipx,
netbeui
- 下記において:
ether proto p
p を上記のいずれかのプロトコルにするのと同等。
- lat, moprc, mopdl
- 下記において:
ether proto p
p を上記のいずれかのプロトコルにするのと同等。tcpdump
はこれらのプロトコルの解析方法は知らないことに注意。
- vlan [vlan_id]
- パケットがIEEE 802.1Q VLAN パケットであれば真。[vlan_id]
が指定された場合、パケットが指定されたvlan_id の時だけ
真。expression中にキーワードvlanが最初に出てきたら、そのパケットはVLANパケットなので、残りの部
分またはexpressionについてデコーディングオフセットが
変更にあることに注意してください。
- tcp, udp, icmp
- 下記において:
ip proto p or ip6 proto p
p を上記のいずれかのプロトコルにするのと同等です。
- iso proto protocol
- パケットが protocol 型のOSIパケットであれば真。Protocol
は数値でも次のうちの名前でも良い:clnp, esis, isis
- clnp, esis, isis
- 下記において:
iso proto p
where p を上記のいずれかのプロトコルにするのと同等です。tcpdump
はこれらのプロトコルに対しての正確な解析方法は知らないことに注意して下さい。
- expr relop expr
- 関係式が成り立てば真。relop(演算子)は>,
<, >=, <=, =, !=, のいずれか一つであり、expr(表現)は製定数による数値表現(表現方法は標準
的なCの文法に従う)、標準的な二項演算子[+, -, *, /, &,
|]、長さ演算子、パケットデータアクセス演算子のいずれかです。パケット内のデータに対して適用するにはこのように記述します:
proto [ expr : size ]
Proto は ether, fddi, tr,
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] はTCPheader
の最初のバイトを意味していますが、フラグメントの最初のバイトではありません。
幾つかのオフセットやフィールド値は名前よりむしろ数値で表されるかもしれません。次のプロトコルヘッダフィールドオフセットが利用可能で
す: icmptype (ICMP type field), icmpcode (ICMP
code field), tcpflags (TCP flags field).
次のICMP型のフィールド値が利用可能です: icmp-echoreply, icmp-unreach,
icmp-sourcequench, icmp-redirect, icmp-echo,
icmp-routeradvert, icmp-routersolicit, icmp-timxceed,
icmp-paramprob, icmp-tstamp, icmp-tstampreply,
icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.
次のTCPフラグフィールド値が利用可能です: tcp-fin, tcp-syn, tcp-rst,
tcp-push, tcp-push, tcp-ack, tcp-urg.
要素を複合させて用いる場合:
- カッコでグループ分けする要素と演算子(カッコはシェルにとっても特別な意味を持つので、エスケープしなければならない)。
- 否定 (`!' or `not').
- 結合 (`&&' or `and').
- 択一 (`||' or `or').
否定は最も高い優先度を持っています。結合と択一は同じで優先度で、左から右へと評価されます。結合は並列するだけでなく、明示的な and
トークンが必要となります。
識別子がキーワードなしで現れた場合は、直前に現れたキーワードとみなされます。例えば、
not host vs and ace
は
not host vs and host ace
の省略であり、これは
not ( host vs or ace )
とは違う。
tcpdump
に渡す条件式は都合の良いように、単一としても複数としてもかまいません。一般的に、シェルのメタキャラクタを含むような条件式の場合は単一のクオートし
た引数として渡すのがいいかもしれません。複数の引数は評価の直前にスペースで結合されます。
documentation.
Copyright (c)
2002-2003 Politecnico di Torino.
2005 translated by Telebusiness,Inc.
All rights reserved.