Я пытаюсь понять как 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, то есть он включен.
Если вы посмотрите на 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, упорядочено так, что: