ここにあるこれら2つのフィルターの違いがわかりません:
proto[x:y] & z = z : every bits are set to z when applying mask z to proto[x:y]
proto[x:y] = z : p[x:y] has exactly the bits set to z
何か案が?
その構文を使用すると、パケットをビット単位でフィルタリングできます。
たとえば、IP フレームの最初の 2 バイトを考えてみましょう。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
バージョンが 4 (IPv4 パケットを示す) の IP パケットのみをフィルタリングするとします。
このようなことができます
tcpdump -i ethX 'ip[0:1] & 0xf0 = 0x40'
ほら、キャプチャされたフレームを深く掘り下げるカスタム フィルターを作成しました。
あなたがリストした2つのケースでは、タイプミスがあると思います。
私はそれがあるべきだと思います:
proto[x:y] & z = n : every bits are set to n when applying mask z to proto[x:y]
proto[x:y] = n : p[x:y] has exactly the bits set to n