tcpdump
がどのように機能するかを理解し、TCPヘッダー制御フラグSYN、ACKなどを読み取ろうとしています。
オンラインで調べたところ、制御フラグがオフセット13で使用可能であり、tcp [13]を使用する必要があることがわかりましたが、この値13がどのように計算されるか理解できません。
誰か助けてもらえますか?
TCP [13]は、ビット(フラグ)の配列です。それらが1に設定されている場合は有効になり、0に設定されている場合は無効になります。
これらのtcpdump
コマンドは、TCP [13]ビットのコレクションを取得し、ビット単位のandを実行して、ビットが有効になっているかどうかをテストする方法を示しています。
Show all URG packets:
# tcpdump 'tcp[13] & 32 != 0'
Show all ACK packets:
# tcpdump 'tcp[13] & 16 != 0'
Show all PSH packets:
# tcpdump 'tcp[13] & 8 != 0'
Show all RST packets:
# tcpdump 'tcp[13] & 4 != 0'
Show all SYN packets:
# tcpdump 'tcp[13] & 2 != 0'
Show all FIN packets:
# tcpdump 'tcp[13] & 1 != 0'
Show all SYN-ACK packets:
# tcpdump 'tcp[13] = 18
参照されているURL(下記)には、それを説明する次の箇条書きがあります。
これらのフィルターが機能する理由を覚えておいてください。上記のフィルターはこれらのさまざまなパケットを検出します。これは、tcp [13]がTCPヘッダーのオフセット13を調べ、数値がバイト内の場所を表し、!= 0が問題のフラグを意味するためです。は1に設定されています。つまり、オンになっています。
RFC 793 3.1 および tcpdumpの高度なフィルター に関するこの記事を見ると、より明白になります。
TCP header
----------
0 1 2 3
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Res. |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Matching any TCP traffic with a source port > 1024
# tcpdump -i eth1 'tcp[0:2] > 1024'
- Matching TCP traffic with particular flag combinations
The flags are defined in the 14th byte of the TCP header.
+-+-+-+-+-+-+-+-+
|C|E|U|A|P|R|S|F|
|W|C|R|C|S|S|Y|I|
|R|E|G|K|H|T|N|N|
+-+-+-+-+-+-+-+-+
注:これらは私たちが興味を持っているフラグです。
バイト(8ビット)を上から数え、0で番号を付けます:
また、バイト13に格納されている番号は、次のように順序付けられていることにも言及します。