TcpdumpでキャプチャするVLAN 1000またはVLAN 501. man pcap-filter
さんのコメント:
Vlan [vlan_id]式は、VLAN階層をフィルターに掛けるために複数回使用できます。この式を使用するたびに、フィルターオフセットが4ずつ増加します。
私がする時:
tcpdump -vv -i eth1 \( vlan 1000 \) and \( ip Host 10.1.1.98 or ip Host 10.1.1.99 \)
キャプチャされたパケットを取得します。
しかし、私がするとき:
tcpdump -vv -i eth1 \( vlan 1000 or vlan 501 \) and \( ip Host 10.1.1.98 or ip Host 10.1.1.99 \)
パケットを取得できません-マニュアルページに記載されている「4ずつ増加」の動作が原因だと思います。
一度に複数のVLAN=のトラフィックをキャプチャするにはどうすればよいですか?
パケットのバイトを直接調べることができることを思い出しました。そのため、イーサネットヘッダーを直接調べると機能します。
tcpdump -vv -i eth1 '( vlan and ( ether[14:2] & 0xfff == 1000 or ether[14:2] & 0xfff == 501 ) ) and ( ip Host 10.1.1.98 or ip Host 10.1.1.99 )'
:2
を忘れないでください。これは2バイトのフィールドです。しばらくの間、これに悩まされていました。
これは、詳細なパケット検査を使用するよりも簡単な方法で実行できます。grepを使用するだけです。
tcpdump -n -i eth1 -e | grep "vlan 1000"
-e:各ダンプ行にリンクレベルのヘッダーを出力します。
それはのような行を印刷します
ethertype 802.1Q (0x8100), length 60: vlan 1000, p 0, ethertype ARP
grepで簡単にキャッチできます
複数のVLAN= IDをキャッチしたい場合は、次のようなコマンドを使用できます。
tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"