Назад | Перейти на главную страницу

tcpdump Смещение заголовка TCP 13

Я пытаюсь понять как tcpdump работает и пытается прочитать флаги управления заголовком TCP SYN, ACK и т. д.

После исследования в сети я узнал, что флаги управления доступны по смещению 13, и мне нужно использовать tcp [13], однако я не могу понять, как вычисляется это значение 13.

Кто-нибудь может помочь?

TCP [13] - это массив бит (флагов). Когда они установлены на 1, они включены, когда они установлены на 0, они отключены.

Эти tcpdump Команды показывают, как можно взять набор битов TCP [13] и выполнить побитовое и, чтобы проверить, включены ли биты:

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] смотрит на смещение 13 в заголовке TCP, число представляет местоположение в байте, а! = 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 = ПЛАВНИК
  • бит 2 = SYN
  • бит 4 = RST
  • бит 8 = PSH
  • бит 16 = ACK
  • бит 32 = URG

Ссылки