EN JA
PCAP-FILTER(7)
PCAP-FILTER(7) FreeBSD Miscellaneous Information Manual PCAP-FILTER(7)

名称

pcap-filter -パケットフィルタ構文
 

解説

pcap_compile() は、フィルタプログラムに文字列をコンパイルするために使用されます。次に、どのパケットが pcap_loop(), pcap_dispatch(), pcap_next() または pcap_next_ex() に供給されるかを決定するためにパケットのいくつかのストリームに結果のフィルタプログラムを適用することができます。

フィルタ式 (filter expression) は、1 つ以上の 基本関数 (primitive) から成ります。通常、基本関数は、1 つ以上の修飾子に先行された id (名前または数値) から成ります。次の 3 つの異なった修飾子があります:

type
type 修飾子は、id 名または数値がどんなものを参照するかを表します。指定できるタイプは、 host, net , portportrange です。例えば、 `host foo', `net 128.3', `port 20', `portrange 6000-6008' です。タイプ修飾子がなければ、 host が仮定されます。
dir
dir 修飾子は、 id からの特定の転送方向を指定します。指定できる方向は、 src, dst, src or dst, src and dst, ra, ta, addr1, addr2, addr3, と addr4 です。例えば、`src foo', `dst net 128.3', `src または dst port ftp-data' です。 dir 修飾子がないなら、 src or dst が仮定されます。 ra, ta, addr1, addr2, addr3addr4 修飾子は、IEEE 802.11 Wireless LAN リンクレイヤのためだけに有効です。 SLIP と ``any'' デバイスのために使用される ``cooked'' Linux キャプチャモードのような、いくつかのリンクレイヤについて、そしてある他のデバイスタイプについて、希望する方向を指定するために inboundoutbound 修飾子を指定することができます。
proto
proto 修飾子は、特定のプロトコルへのマッチを制限します。指定できる protos は、次の通りです: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcpudp です。例えば、`ether src foo', `arp net 128.3', `tcp port 21', `udp portrange 7000-7009', `wlan addr2 0:2:3:4:5:6' です。 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' を意味します。

[`fddi' は、実際に `ether' のための別名です。パーサは、同様に ``指定されたネットワークインタフェースで使用されたデータリンクレベル'' を意味するように、それらを取り扱います。 FDDI ヘッダは、イーサネットのような発信元と宛先アドレスを含み、しばしばイーサネットのようなパケットタイプを含んでいるので、利用者は、ちょうど類似のイーサネットフィールドと同様に、これらで FDDI フィールドでフィルタリングすることができます。また、FDDI ヘッダは、他のフィールドを含んでいますが、利用者は、フィルタ式で明白にそれらを指定することができません。

同様に、`tr' and `wlan' は、`ether' のための別名です。また、FDDI ヘッダに関する前のパラグラフの文は、Token Ring と 802.11 無線 LAN ヘッダに適用されます。 802.11 ヘッダにおいて、宛先アドレスは、DA フィールドで、発信元アドレスは、SA フィールドです。 BSSID、RA と TA フィールドは、テストされません。]

上記に加えて、パターンに従わない、いくつかの特別な `primitive' キーワードがあります: gateway, broadcast, less, greater は、算術式です。これらのすべては、以下に説明されます。

より複雑なフィルタ式は、基本関数を結合するために単語 and, ornot を使用することによって組み立てられます。例えば、`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 であるなら、真。
次のようなキーワード、 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 発信元も IP 宛先ホストも host ではありませんでした。 host は、名前でなければならなくて、マシンのホスト名から IP アドレス (host-name-to-IP-address) 解決メカニズム (ホスト名ファイル、DNS、NIS など) とマシンのホスト名からイーサネットアドレス (host-name-to-Ethernet-address) 解決メカニズム (/etc/ethers など) の両方によって、見つからなければなりません。 (同等な式は、

ether host ehost and not host host

です、これは、 host / ehost のための名前または数値のいずれかで使用することができます。) この構文は、現時点では、IPv6 有効化設定で動作しません。
dst net net
パケットの IPv4/v6 宛先アドレスに、 net のネットワーク番号があるなら、真。 net は、ネットワークデータベース (/etc/networks など) からの名前またはネットワーク番号のいずれかを指定できます。ドット付き 4 つ組 (例えば、192.168.1.0)、ドット付き 3 つ組 (例えば、192.168.1)、ドット付き 2 つ組 (例えば、172.16) または単一番号 (例えば、10) として、 IPv4 ネットワーク番号を書き込むことができます。ネットマスクは、(実際にホストマッチすることを意味する) ドット付き 4 つ組のために 255.255.255.255、ドット付き 3 つ組のために 255.255.255.0、ドット付き 2 つ組のために 255.255.0.0 または単一番号のために 255.0.0.0 です。 IPv6 ネットワーク番号は、完全に書かれなければなりません。ネットマスクは、ff:ff:ff:ff:ff:ff:ff:ff ですので、実際に IPv6 "ネットワーク"マッチは、常にホストマッチであり、ネットワークマッチは、ネットマスクの長さを必要とします。
src net net
パケットの IPv4/v6 発信元アドレスに、 net のネットワーク番号があるなら、真。
net net
パケットの IPv4/v6 発信元または宛先アドレスのいずれかに、 net のネットワーク番号があるなら、真。
net net mask netmask
IPv4 アドレスが、特定の netmask がある net にマッチするなら、真。 src または dst で修飾されるかもしれません。この構文は、IPv6 net に対して有効ではないことに注意してください。
net net/ len
IPv4/v6 アドレスがネットマスク len ビット幅がある net にマッチしているなら、真。 src または dst で修飾されるかもしれません。
dst port port
パケットが ip/tcp、ip/udp、ip6/tcp または ip6/udp であり、 port の宛先ポート値があるなら、真。 /etc/services ( tcp(4P) と udp(4P) を参照) で使用する数値または名前として port を指定することができます。名前が使用されるなら、ポート番号とプロトコルの両方がチェックされます。数値またはあいまいな名前が使用されるなら、ポート番号だけがチェックされます (例えば、 dst port 513 は、tcp/login トラフィックと udp/who トラフィックの両方を印刷し、 port domain は、 tcp/domain と udp/domain トラフィックの両方を印刷します)。
src port port
パケットに port 発信元ポート値があるなら、真。
port port
パケットの発信元または宛先ポートのいずれかが、 port であるなら、真。
dst portrange port1 - port2
パケットが ip/tcp、ip/udp、ip6/tcp または ip6/udp であり、 port1port2 の間の宛先ポート値があるなら、真。 port1port2 は、 port のための port パラメータと同じやり方で解釈されます。
src portrange port1 - port2
パケットに port1port2 の間のポート値があるなら、真。
portrange port1 - port2
パケットの発信元または宛先ポートが port1port2 の間であるなら、真。
次のようなキーワード、 tcp または udp に上記のポートまたはポート範囲式のいずれかを前に追加することができます:

tcp src port port

これは、発信元ポートが port である tcp パケットのみにマッチします。
less length
パケットに、 length 以下の長さがあるなら、真。これは、次と同等です:

len <= length

greater length
パケットに、 length 以上の長さがあるなら、真。これは、次と同等です:

len >= length

ip proto protocol
パケットがプロトコルタイプ protocol の IPv4 パケット ( ip(4P) 参照) であるなら、真。数値または名前 icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp または tcp の 1 つとして Protocol を指定することができます。また、識別子 tcp, udpicmp は、キーワードであり、C シェルでは \\ であるバックスラッシュ (\) でエスケープしなければならないことに注意してください。この基本関数は、プロトコルヘッダチェーンを追跡しないことに注意してください。
ip6 proto protocol
パケットがプロトコルタイプ protocol の IPv6 パケットであるなら、真。この基本関数は、プロトコルヘッダチェーンを追跡しないことに注意してください。
proto protocol
パケットがプロトコルタイプ protocol の IPv4 または IPv6 のパケットであるなら、真。この基本関数は、プロトコルヘッダチェーンを追跡しないことに注意してください。
tcp, udp, icmp
省略形は、次の通りです:

proto p

ここで、 p は、上記のプロトコルの 1 つです。
ip6 protochain protocol
パケットが IPv6 パケットであり、プロトコルヘッダチェーンにタイプ protocol があるプロトコルヘッダを含んでいるなら、真。例えば、

ip6 protochain 6

は、プロトコルヘッダチェーンの TCP プロトコルヘッダがある IPv6 パケットにマッチします。パケットは、IPv6 ヘッダと TCP ヘッダの間に、例えば、認証ヘッダ、ルーティングヘッダ、または中継点ごと (hop-by-hop) のオプションヘッダを含むかもしれません。この基本関数によって出力された BPF コードは、複雑であり、 BPF オプティマイザコードによって最適化できないので、これはいくらか遅くなるかもしれません。
ip protochain protocol
ip6 protochain protocol と同等ですが、これは、IPv4 のためのものです。
protochain protocol
パケットがプロトコルタイプ protocol の IPv4 または IPv6 のパケットであるなら、真。この基本関数は、プロトコルヘッダチェーンを追跡することに注意してください。
ether broadcast
パケットがイーサネットブロードキャスト (同報通信) パケットであるなら、真。 ether キーワードは、オプションです。
ip broadcast
パケットが IPv4 ブロードキャスト (同報通信) パケットであるなら、真。全て 0 と全て 1 の両方のブロードキャスト (同報通信) 規約をチェックし、キャプチャが行われているインタフェースでサブネットマスクを検索します。
キャプチャが行われているインタフェースのサブネットマスクが利用可能でないなら、キャプチャが行われているインタフェースにネットマスクがないため、または 2 以上でインタフェースでキャプチャすることができる、キャプチャが Linux "any"インタフェースで行われているために、このチェックは、正しく動作しません。
ether multicast
パケットがイーサネットマルチキャストパケットであるなら、真。 ether キーワードは、オプションです。これは、` ether[0] & 1 != 0' の省略表現です。
ip multicast
パケットが IPv4 マルチキャストパケットであるなら、真。
ip6 multicast
パケットが IPv6 マルチキャストパケットであるなら、真。
ether proto protocol
パケットが ether タイプ protocol であるなら、真。数値または名前 ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx または netbeui の 1 つとして protocol を指定することができます。また、これらの識別子は、キーワードであり、バックスラッシュ (\) でエスケープしなければないことに注意してください。
[FDDI (例えば、` fddi protocol arp')、Token Ring (例えば、` tr protocol arp') と IEEE 802.11 無線 LANS (例えば、` wlan protocol arp') の場合に、それらのプロトコルの大部分のために、プロトコル識別は、通常、FDDI、Token Ring、または 802.11 ヘッダで階層化された、 802.2 Logical Link Control (LLC) ヘッダから来ています。
FDDI、Token Ring または 802.11 で、ほとんどのプロトコル識別子のためにフィルタリングするとき、フィルタは、カプセル化されたイーサネットのために、 0x000000 の Organizational Unit Identifier (OUI) でいわゆる SNAP 形式の LLC ヘッダのプロトコル ID フィールドのみチェックします。パケットが 0x000000 の OUI で SNAP 形式であるかどうか、チェックしません。例外は、次の通りです:
iso
フィルタは、LLC ヘッダの DSAP (Destination Service Access Point) と SSAP (Source Service Access Point) フィールドをチェックします。
stp and netbeui
フィルタは、LLC ヘッダの DSAP をチェックします。
atalk
フィルタは、0x080007 の OUI がある SNAP-形式パケットと AppleTalk etype をチェックします。
イーサネットの場合は、フィルタは、それらのプロトコルの大部分に対してイーサネットタイプフィールドをチェックします。例外は、次の通りです:
iso, stp, and netbeui
フィルタは、802.3 フレームをチェックして、次に、FDDI、Token Ring と 802.11 をチェックするように、LLC ヘッダをチェックします。
atalk
フィルタは、イーサネットフレームの AppleTalk etype と FDDI、Token Ring と 802.11 をチェックするように、 SNAP-形式パケットの両方をチェックします。
aarp
フィルタは、イーサネットフレームの AppleTalk ARP etype または 0x000000 の OUI がある 802.2 SNAP フレームをチェックします。
ipx
フィルタは、イーサネットフレームの IPX etype、LLC ヘッダの IPX DSAP、 IPX の 802.3-with-no-LLC-header カプセル化と SNAP フレームの IPX etype をチェックします。
ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui
省略形は、次の通りです:

ether proto p

ここで、 p は、上記のプロトコルの 1 つです。
lat, moprc, mopdl
省略形は、次の通りです:

ether proto p

ここで、 p は、上記のプロトコルの 1 つです。現在 pcap(3) を使用するすべてのアプリケーションは、これらのプロトコルを解析する方法を知らないことに注意してください。
decnet src host
DECNET 発信元アドレスが、形式 ``10.123'' のアドレスまたは DECNET ホスト名である、 host であるなら、真。 [DECNET ホスト名のサポートは、DECNET を実行するために設定される ULTRIX システムでのみ利用可能です。]
decnet dst host
DECNET 宛先アドレスが host であるなら、真。
decnet host host
DECNET 発信元または宛先アドレスのいずれかが host であるなら、真。ホストです。
ifname interface
パケットが (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) 指定されたインタフェースから着信するようにログ記録されるなら、真。
on interface
ifname 修飾子と同義語です。
rnr num
パケットが (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) 指定された PF ルール番号とマッチするようにログ記録されるなら、真。
rulenum num
rnr 修飾子と同義語です。
reason code
パケットが指定された PF 理由コードでログ記録されたなら、真。知られているコードは、次の通りです: (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) match, bad-offset, fragment, short, normalize, と memory
rset name
パケットが (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) 固定されたルールセットの指定された PF ルールセット名とマッチするようにログ記録されるなら、真。
ruleset name
rset 修飾子と同義語です。
srnr num
パケットが (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) 固定されたルールセットの指定された PF ルール番号とマッチするようにログ記録されるなら、真。
subrulenum num
srnr 修飾子と同義語です。
action act
パケットがログ記録されるとき、PF が指定されたアクションを取ったなら、真。知られているアクションは、次の通りです: passblock および (OpenBSD または FreeBSD の pf(4) によってログ記録されるパケットだけに適用される) pf(4), nat, rdr, binatscrub の後のバージョン。
wlan ra ehost
IEEE 802.11 RA が ehost であるなら、真です。 RA フィールドは、管理フレームを除いて、すべてのフレームで使用されます。
wlan ta ehost
IEEE 802.11 TA が ehost であるなら、真です。 TA フィールドは、管理フレームと CTS (Clear To Send) と ACK (Acknowledgment) 制御フレームを除いて、すべてのフレームで使用されます。
wlan addr1 ehost
最初の IEEE 802.11 アドレスが ehost であるなら、真。
wlan addr2 ehost
2 番目の IEEE 802.11 アドレスが存在し、 ehost であるなら、真。 2 番目のアドレスフィールドは、CTS (Clear To Send) と ACK (Acknowledgment) 制御フレームを除いて、すべてのフレームで使用されます。
wlan addr3 ehost
3 番目の IEEE 802.11 アドレスが存在し、 ehost であるなら、真。 3 番目のアドレスフィールドは、管理とデータフレームで使用されますが、制御フレームで使用されません。
wlan addr4 ehost
4 番目の IEEE 802.11 アドレスが存在し、 ehost であるなら、真。 4 番目のアドレスフィールドは、WDS (Wireless Distribution System) フレームのためだけに使用されます。
type wlan_type
IEEE 802.11 フレームタイプが、指定された wlan_type にマッチするなら、真。有効な wlan_type は、次の通りです: mgt, ctldata
type wlan_type subtype wlan_subtype
IEEE 802.11 フレームタイプが指定された wlan_type とマッチし、フレームサブタイプが指定された wlan_subtype とマッチするなら、真。
指定された wlan_typemgt であるなら、有効な wlan_subtype は、次の通りです: assoc-req, assoc-resp, reassoc-req, reassoc-resp, probe-req, probe-resp, beacon, atim, disassoc, authdeauth
指定された wlan_typectl であるなら、有効な wlan_subtype は、次の通りです: ps-poll, rts, cts, ack, cf-endcf-end-ack
指定された wlan_typedata であるなら、有効な wlan_subtype は、次の通りです: data, data-cf-ack, data-cf-poll, data-cf-ack-poll, null, cf-ack, cf-poll, cf-ack-poll, qos-data, qos-data-cf-ack, qos-data-cf-poll, qos-data-cf-ack-poll, qos, qos-cf-pollqos-cf-ack-poll
subtype wlan_subtype
IEEE 802.11 フレームサブタイプが指定された wlan_subtype にマッチし、フレームには、指定された wlan_subtype が属するタイプがあるなら、真。
dir dir
IEEE 802.11 フレーム指示が指定された dir にマッチするなら、真。有効な指示は、次の通りです: nods, tods, fromds, dstods または数値。
vlan [vlan_id]
パケットが IEEE 802.1Q VLAN パケットであるなら、真。 [vlan_id] が指定され、パケットに指定された vlan_id がある場合のみ、真。最初の vlan キーワードは、パケットが VLAN パケットであると想定して expression の残りのためにデコードされたオフセットを変更する expression に遭遇することに注意してください。 vlan [vlan_id] 式は、VLAN 階層構造でフィルタするために、何度も使用されます。その式を使用する毎にフィルタオフセットを 4 つ増加します。
例えば:

vlan 100 && vlan 200

これは、VLAN 100 でカプセル化された VLAN 200 でフィルタリングし、

vlan && vlan 300 && ip

は、任意のより高いオーダ VLAN でカプセル化された VLAN 300 でカプセル化された IPv4 プロトコルをフィルタリングします。
mpls [label_num]
パケットが MPLS パケットであるなら、真。 [label_num] が指定され、パケットに指定された label_num がある場合のみ、真。最初の mpls キーワードは、パケットが MPLS のカプセル化された IP パケットであると想定して expression の残りのためにデコードされたオフセットを変更する expression に遭遇することに注意してください。 mpls [label_num] 式は、MPLS 階層構造でフィルタするために、何度も使用されます。その式を使用する毎にフィルタオフセットを 4 つ増加します。
例えば:

mpls 100000 && mpls 1024

これは、100000 の外側のラベルと 1024 の内側のラベルでパケットをフィルタリングし、

mpls && mpls 1024 && host 192.9.200.1

は、1024 の内側のラベルと任意の外側のラベルで、 192.9.200.1 へ、または、192.9.200.1 からパケットをフィルタリングします。
pppoed
パケットが PPP-over-Ethernet Discovery パケット (イーサネットタイプ 0x8863) であるなら、真。
pppoes
パケットが PPP-over-Ethernet Session パケット (イーサネットタイプ 0x8864) であるなら、真。最初の pppoes キーワードは、パケットが PPPoE セッションパケットであると想定して expression の残りのためにデコードされたオフセットを変更する expression に遭遇することに注意してください。
例えば:

pppoes && ip

これは、PPPoE でカプセル化された IPv4 プロトコルをフィルタリングします。
iso proto protocol
パケットがプロトコルタイプ protocol の OSI パケットであるなら、真。数値、または名前 clnp, esis または isis として Protocol を指定することができます。
clnp, esis, isis
省略形は、次の通りです:

iso proto p

ここで、 p は、上記のプロトコルの 1 つです、
l1, l2, iih, lsp, snp, csnp, psnp
IS-IS PDU タイプの省略形。
vpi n
パケットが n の仮想パス識別子がある、Solaris の SunATM のための ATM パケットであるなら、真。
vci n
パケットが n の仮想チャネル識別子がある、Solaris の SunATM のための ATM パケットであるなら、真。
lane
パケットが Solaris の SunATM のための ATM パケットであり、 ATM LANE パケットであるなら、真。最初の lane キーワードは、パケットが LANE emulated Ethernet パケットまたは LANE LE Control パケットのいずれかであると想定して expression の残りで行うテストを変更する expression に遭遇することに注意してください。 lane が指定されないなら、パケットが LLC のカプセル化されたパケットであると想定してテストは、行われます。
llc
パケットが Solaris の SunATM のための ATM パケットであり、 LLC のカプセル化されたパケットであるなら、真。
oamf4s
パケットが Solaris の SunATM のための ATM パケットであり、セグメント OAM F4 フローセル (VPI=0 & VCI=3) であるなら、真。
oamf4e
パケットが Solaris の SunATM のための ATM パケットであり、 end-to-end OAM F4 フローセル (VPI=0 & VCI=4) であるなら、真。
oamf4
パケットが Solaris の SunATM のための ATM パケットであり、セグメントまたは end-to-end OAM F4 フローセル (VPI=0 & (VCI=3 | VCI=4)) であるなら、真。
oam
パケットが Solaris の SunATM のための ATM パケットであり、セグメントまたは end-to-end OAM F4 フローセル (VPI=0 & (VCI=3 | VCI=4)) であるなら、真。訳注: 上記の oamf4 と同じ説明であるので、どちらかが違っている可能性がある。
metac
パケットが Solaris の SunATM のための ATM パケットであり、メタシグナリングサーキット (VPI=0 & VCI=1) 上にあるなら、真。
bcc
パケットが Solaris の SunATM のための ATM パケットであり、ブロードキャスト (同報通信) シグナリングサーキット (VPI=0 & VCI=2) 上にあるなら、真。
sc
パケットが Solaris の SunATM のための ATM パケットであり、シグナリングサーキット (VPI=0 & VCI=5) 上にあるなら、真。
ilmic
パケットが Solaris の SunATM のための ATM パケットであり、 ILMI サーキット (VPI=0 & VCI=16) 上にあるなら、真。
connectmsg
パケットが Solaris の SunATM のための ATM パケットであり、シグナリングサーキットの上にあり、Q.2931 Setup、Call Proceeding、 Connect、Connect Ack、Release または Release Done メッセージであるなら、真。
metaconnect
パケットが Solaris の SunATM のための ATM パケットであり、メタシグナリングサーキットの上にあり、Q.2931 Setup、Call Proceeding、Connect、 Release または Release Done メッセージであるなら、真。
expr relop expr
relop が >, <, >=, <=, =, != の 1 つであり、 expr が (標準の C 構文で表現される) 整数定数、通常のバイナリ演算子 [+, -, *, /, &, |, <<, >>]、長さ演算子、と特別なパケットデータアクセサからなる算術式であるところで、関係が保持されているなら、真。例えば、 0x80000000 と 0xffffffff が > 0 となるような、すべての比較が符号なしであることに注意してください。パケット中のデータにアクセスするには、次の構文を使用します:

proto [ expr : size ]

proto は、 ether, fddi, tr, wlan, ppp, slip, link, ip, arp, rarp, tcp, udp, icmp, ip6 または radio 1 つであり、インデックス操作のためのプロトコルレイヤを示します。 ( ether, fddi, wlan, tr, ppp, sliplink は、すべてリンクレイヤを参照します。 radio は、いくつかの 802.11 キャプチャに追加された "radio header"を参照します。) tcp, udp と他の上位レイヤプロトコルタイプは、IPv6 ではなく、IPv4 のみに適用されることに注意してください (これは将来、修正されるでしょう)。示されたプロトコルレイヤに関連するバイトオフセットは、 expr によって与えられます。 size は、オプションであり、関心があるフィールドのバイト数を示します。 1、2、または 4 のいずれかを指定できます、デフォルトは、1 です。キーワード len によって示された長さ演算子は、パケットの長さを与えます。
 
例えば、` ether[0] & 1 != 0' は、すべてのマルチキャストトラフィックを捕獲します。式 ` ip[0] & 0xf != 5' は、オプションですべての IPv4 パケットを捕獲します。式 ` ip[6:2] & 0x1fff = 0' は、フラグメント化されていない IPv4 データグラムとフラグメント化されている IPv4 データグラムの frag (訳注: フラグメント?) 0 のみを捕獲します。このチェックは、暗黙のうちに tcpudp インデックス操作に適用されます。例えば、 tcp[0] は、常に TCP header の最初のバイトを意味し、決して中間のフラグメントの最初のバイトを意味しません。
 
いくつかのオフセットとフィールド値は、数値ではなく名前として表現されます。次のプロトコルヘッダフィールドのオフセットが、利用可能です: icmptype (ICMP タイプフィールド), icmpcode (ICMP コードフィールド) と tcpflags (TCP フラグフィールド)。
 
次の 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-ack, tcp-urg

基本関数は、次を使用して結合されます:

基本関数と演算子の括弧で括られたグループ (括弧は、シェルでは特別であり、エスケープされなければなりません)。
negation (否定) (` !' または ` not')。
concatenation (連結) (` &&' または ` and')。
alternation (交互) (` ||' または ` or')。

negation (否定) には、最も高い優先順位があります。 alternation (交互) と concatenation (連結) は、等しい優先順位があり、左から右に結合します。並列ではなく、明白な and トークンは、現在 concatenation (連結) のために必要であることに注意してください。

識別子がキーワードなしで与えられるなら、最新のキーワードが仮定されます。例えば、

not host vs and ace

は、次の短縮形であり、

not host vs and host ace

次と混乱するべきではありません。

not ( host vs or ace )

使用例

sundown から到着するか、または出発するすべてのパケットを選択するためには:

host sundown

helioshot または ace との間のトラフィックを選択するためには:


host helios and \( hot or ace \)

acehelios 以外の任意のホストの間のすべての IP パケットを選択するためには:


ip host ace and not helios

Berkeley でローカルホストとホストの間のすべてのトラフィックを選択するためには:

net ucb-ether

インターネットゲートウェイ snup を通るすべての ftp トラフィックを選択するためには:

gateway snup and (port ftp or ftp-data)

(利用者が他の 1 つのネットへのゲートウェイを使用するなら、これを決して利用者のローカルネットに向けるべきではありません) ローカルホストからの発信元からでもなく、宛先へでもないトラフィックを選択するためには:

ip and not net localnet

非ローカルホストを含む各 TCP 通信の開始と終りのパケット (SYN と FIN パケット) を選択するためには:

tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet

ポート 80 へとポート 80 からのすべての IPv4 HTTP パケットを選択するためには、すなわち、例えば、SYN と FIN パケットと ACK のみパケットではなく、データを含むパケットだけを印刷するには: (IPv6 は、リーダ (reader) のための実行として残されています。)

tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

ゲートウェイ snup を通して送信される 576 バイトより長い間 IP パケットを選択するためには:

gateway snup and ip[2:2] > 576

イーサネットブロードキャスト (同報通信) またはマルチキャストを通して送信され ない IP ブロードキャストまたはマルチキャストパケットを選択するためには:

ether[0] & 1 = 0 and ip[16] >= 224

echo 要求/応答 (すなわち、ping パケット) でないすべての ICMP パケットを選択するためには:

icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply

関連項目

pcap(3)

バグ

問題、バグ、質問、望ましい改良、その他は、次に送ってください:

tcpdump-workers@lists.tcpdump.org

Token Ring ヘッダのそれら以外のフィールドのフィルタ式は、始点経路化 (source-routed) された Token Ring パケットを正しく取り扱いません。

802.11 ヘッダのそれら以外のフィールドのフィルタ式は、To DS と From DS セットの両方で 802.11 データパケットを正しく取り扱いません。

ip6 proto は、ヘッダチェーンを追跡するべきですが、現時点では、追跡しません。 ip6 protochain は、この振る舞いのために供給されます。

tcp[0] のような、トランスポートレイヤヘッダに対する算術式は、 IPv6 パケットに対して動作しません。それは、IPv4 パケットを見るだけです。

6 January 2008