Mit libpcap nach ether_type und nach angegebenen Bytes filtern


0

Dank pcap_filtermöchte ich filtern nach

  • ether_type : Protokoll 0x88b5
  • UND nach bestimmten Bytes in der Nutzlast: "ASK" oder 0x41434b

Es ist Ethernet-Ebene => keine Netzwerkschicht, direkt die Nutzlast.

=> Die Bytes, nach denen ich suche, befinden sich auf den Bytes 15, 16 und 17 des Ethernet-Frames, richtig?

Ich habe es versucht, aber das funktioniert nicht:

char filter_exp[] = "ether proto 0x88b5 and ether[14:3] == 0x41434b";   

if(pcap_compile(descr,&fp,filter_exp,0,PCAP_NETMASK_UNKNOWN) == -1)
{ fprintf(stderr,"Error calling pcap_compile\n"); exit(1); }

Meine Frage ist :

  • Können wir Filter auf ether_typeund Bytes mischen ?
  • Wenn nein, wie kann ich das machen? Indem Sie die Bytes angeben, nach denen auch gefiltert ether_typewerden soll?

Wir können das ether_typeund die Bytes mischen , aber die Anzahl der Bytes muss gerade sein (2 oder 4 Werke) ...
EisenHeim

Antworten:


1

Es hört sich also so an, als hätten Sie Ihre eigene Frage beantwortet:

ether proto 0x88b5 and ether[14:2] == 0x4143 and ether[16:1] == 0x4b

... wenn Sie also in den ersten drei Bytes des Pakets nach "ACK" suchen.

Wenn Sie nach "ASK" suchen, wäre das

ether proto 0x88b5 and ether[14:2] == 0x4153 and ether[16:1] == 0x4b

Aber die Anzahl der Bytes muss nicht gerade sein, es muss nur eine Zweierpotenz zwischen 1 und 4 sein, dh 1, 2 oder 4, und Sie können mehrere Tests durchführen.


Ja, im Grunde ist es das :)
EisenHeim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.