web-dev-qa-db-ja.com

tcpdump TCPヘッダーオフセット13

tcpdumpがどのように機能するかを理解し、TCPヘッダー制御フラグSYN、ACKなどを読み取ろうとしています。

オンラインで調べたところ、制御フラグがオフセット13で使用可能であり、tcp [13]を使用する必要があることがわかりましたが、この値13がどのように計算されるか理解できません。

誰か助けてもらえますか?

2
Deepak

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に設定されています。つまり、オンになっています。

TCPヘッダー

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で番号を付けます:

  • したがって、 "送信元ポート" "宛先ポート"はバイト0、1、2、および3を構成します。
  • 次の行 "シーケンス番号"は4-7になります。
  • "確認番号"はバイト8〜11になります。
  • "データオフセット"& "解像度"はバイト12になります。
  • これにより、バイト13に移動します。このバイトのビットはフラグです。

ビット順序

また、バイト13に格納されている番号は、次のように順序付けられていることにも言及します。

  • ビット1 =[〜#〜] fin [〜#〜]
  • ビット2 =[〜#〜] syn [〜#〜]
  • ビット4 =[〜#〜] rst [〜#〜]
  • ビット8 =[〜#〜] psh [〜#〜]
  • ビット16 =[〜#〜] ack [〜#〜]
  • ビット32 =[〜#〜] urg [〜#〜]

参考文献

1
slm