tcpdump filter para determinados bytes em determinada posição

4

Estou procurando uma maneira de filtrar o tráfego de bytes específicos.

O que eu tenho é um fluxo que eu capture com wireshark ou tcpdump . Agora ele registra demais, então eu quero descartar todos os pacotes que possuem 0x23 no lugar 42 na carga útil.

Existe uma maneira fácil de fazer isso? Estou pesquisando por gsmtap , mas qualquer exemplo com qualquer protocolo deve ser bom.

    
por Steve 03.08.2011 / 23:16

1 resposta

3

tcpdump(1) usa libpcap(3) , que usa uma sintaxe de filtro documentada na página pcap-filter(7) man.

Você pode querer pular para a seção expr relop expr e a notação de colchetes:

expr relop expr
       True if the relation holds, where relop is one of >, <, >=, <=,  =,  !=,  and
       expr  is an arithmetic expression composed of integer constants (expressed in
       standard C syntax), the normal binary operators [+, -, *, /, &, |, <<, >>], a
       length  operator,  and  special packet data accessors.  Note that all compar-
       isons are unsigned, so that, for example, 0x80000000 and 0xffffffff are >  0.
       To access data inside the packet, use the following syntax:
            proto [ expr : size ]
       Proto  is  one of ether, fddi, tr, wlan, ppp, slip, link, ip, arp, rarp, tcp,
       udp, icmp, ip6 or radio, and indicates the protocol layer for the index oper-
       ation.   (ether,  fddi,  wlan,  tr,  ppp, slip and link all refer to the link
       layer. radio refers to the "radio header" added  to  some  802.11  captures.)
       Note  that  tcp, udp and other upper-layer protocol types only apply to IPv4,
       not IPv6 (this will be fixed in the future).  The byte  offset,  relative  to
       the  indicated  protocol layer, is given by expr.  Size is optional and indi-
       cates the number of bytes in the field of interest; it  can  be  either  one,
       two,  or  four,  and  defaults to one.  The length operator, indicated by the
       keyword len, gives the length of the packet.

Então, por exemplo, se você quiser filtrar os pacotes com 0x23 no local 42 da carga útil de um quadro Ethernet-II, isso seria no deslocamento 56 do quadro Ethernet geral (seu deslocamento de 42 mais um deslocamento de 14 bytes para passar os cabeçalhos Ethernet para o payload), então você poderia fazer algo assim:

ether[56] != 0x23

Eu não li totalmente no gsmtap, então não estou garantindo que o filtro acima seja exatamente o que você precisa, mas deve começar na direção certa.

    
por 04.08.2011 / 00:54