Estou tentando restringir tcpdump
o comprimento do pacote. Eu sei que posso `| grep, mas gostaria de saber se posso passar esse comprimento de pacote específico como uma opção em 'tcpdump'. Estou tentando escrever um script para me mostrar todos os multicast MPEG-TS presentes na rede usando o seguinte comando:
sudo tcpdump -c 1000 -ti <network_interface> multicast | grep 1316 | sort | uniq
Então esse comando funciona e me dá exatamente a saída que eu quero, mas eu estava pensando que poderia simplificá-lo passando o comprimento no tcpdump
comando, algo como:
sudo tcpdump -c 1000 -ti <network_interface> multicast and length 1316 | sort | uniq
Responder1
Tamanho total do pacote Ethernet
De acordo comfiltro pcap(7), você pode usar as seguintes condições:
less length
, equivalente alen <= length
greater length
, equivalente alen >= length
Com base nos exemplos, você também poderá usar , mas isso não está documentado.
len == length
Observe que isso inclui os cabeçalhos da camada de enlace e da camada de rede (ou seja, tudo o que foi capturado), portanto, um TCP ACK vazio terá um campo de "comprimento total" de IP de 60, mas será visto como um total de 74 bytes.
Veja também este tópico StackOverflow:https://stackoverflow.com/questions/9874093/how-to-filter-tcpdump-output-based-on-packet-length
Tamanho total do pacote IP
De acordo comtcpdump(1), você pode acessar o campo "Comprimento total" do cabeçalho IPv4:
ip[2:2] > 576
ip[2:2] <= 1000
- e semelhantes.
Tamanho total do pacote UDP ou da carga útil
O UDP não possui um campo de comprimento, mas o tamanho do cabeçalho é sempre 8, e você podegeralmentesuponha que o tamanho do cabeçalho IPv4 será sempre 20 (as opções IPv4 sãomuitoraro, embora sejam usados no IGMP).
Então, se você estiver tentando filtrar datagramas UDP de 1316 bytes,
- IP.TotalLength = IP.Header[20] + UDP.Header[8] + UDP.Payload[1316]
você obtém o filtro ip[2:2] == 1344
.