4

Я ищу способ фильтрации трафика для конкретных байтов.

У меня есть поток, который я записываю с помощью wireshark или tcpdump . Теперь он слишком много регистрирует, поэтому я хочу отбросить каждый пакет с 0x23 в месте 42 в полезной нагрузке.

Есть простой способ сделать это? Я ищу gsmtap , но любой пример с любым протоколом должен подойти .

1 ответ1

3

tcpdump(1) использует libpcap(3) , который использует синтаксис фильтра, описанный в справочной странице pcap-filter(7) .

Возможно, вы захотите перейти к expr relop expr и квадратным скобкам :

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.

Так, например, если вы хотите отфильтровать пакеты с 0x23 в местоположении 42 полезной нагрузки кадра Ethernet-II, это будет по смещению 56 общего кадра Ethernet (ваше смещение 42 плюс смещение 14 байтов, чтобы получить после заголовков Ethernet до полезной нагрузки), так что вы можете сделать что-то вроде этого:

ether[56] != 0x23

Я не полностью прочитал gsmtap, поэтому я не гарантирую, что приведенный выше фильтр - именно то, что вам нужно, но он должен направить вас в правильном направлении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .