tcpdump Deslocamento do cabeçalho TCP 13

1

Estou tentando entender como o tcpdump funciona e tentando ler sinalizadores de controle de cabeçalho TCP SYN, ACK etc.

Depois de pesquisar on-line, descobri que os flags de controle estão disponíveis no offset 13 e preciso usar tcp [13], mas não consigo entender como esse valor 13 foi calculado.

Alguém pode ajudar?

    
por Deepak 21.07.2018 / 19:35

1 resposta

0

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

Referências

por 22.07.2018 / 01:21

Tags