TCP [13] é uma matriz de bits (flags). Quando eles estão definidos como 1, eles são ativados e, quando são 0, são desativados.
Estes comandos tcpdump
mostram como você pode pegar a coleção de TCP [13] bits e fazer ands e bits para testar se os bits estão habilitados:
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
O URL referenciado (abaixo) tinha esse marcador que explica também:
Keep in mind the reasons these filters work. The filters above find these various packets because tcp[13] looks at offset 13 in the TCP header, the number represents the location within the byte, and the !=0 means that the flag in question is set to 1, i.e. it’s on.
Cabeçalho TCP
Se você der uma olhada no RFC 793 3.1 , bem como neste artigo sobre filtros avançados do tcpdump torna-se mais óbvio.
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|
+-+-+-+-+-+-+-+-+
NOTA: estas são as bandeiras que nos interessam.
Calculando a posição da bandeira
Você conta os bytes (8 bits) do topo, numerando-os em 0:
- Então "Porta de origem" & "Porta de destino" compõe os bytes 0, 1, 2 e & 3.
- A próxima linha, "Número de sequência" , seria de 4 a 7.
- "Número de reconhecimento" seria 8-11 bytes.
- "Deslocamento de dados" & "Res." seria o byte 12.
- Isso leva você para o byte 13, os bits neste byte são os sinalizadores.
Ordem de bits
Também mencionarei que o número armazenado no byte 13 é ordenado de tal forma que:
- bit 1 = FIN
- bit 2 = SYN
- bit 4 = RST
- bit 8 = PSH
- bit 16 = ACK
- bit 32 = URG