0

ここにあるこれら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

何か案が?

4

1 に答える 1

1

その構文を使用すると、パケットをビット単位でフィルタリングできます。

たとえば、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'
  • ip[0:1]は、「IP フレームのオフセット 0 から 1 バイトを抽出する」ことを意味します。
  • & 0xf0は、最初のバイトから IHL ビットを除外します
  • = 0x40は、バージョン ビットに数値 4 が含まれている場合にのみ一致します

ほら、キャプチャされたフレームを深く掘り下げるカスタム フィルターを作成しました。

あなたがリストした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
于 2013-02-13T15:14:05.443 に答える