Благодаря pcap_filter я хочу фильтровать по

  • ether_type : протокол 0x88b5
  • И по конкретным байтам в полезной нагрузке: "ASK" или 0x41434b

Это уровень Ethernet => нет сетевого уровня, непосредственно полезная нагрузка.

=> байты, которые я ищу, находятся на байтах 15, 16 и 17 кадра Ethernet, верно?

Я пробовал это, но это не работает:

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); }

Мой вопрос:

  • мы можем смешать фильтры на ether_type и байтах?
  • Если нет, как я могу это сделать? Указывая байты для фильтрации в ether_type тоже?

1 ответ1

1

Похоже, вы ответили на свой вопрос:

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

... если вы ищете "ACK" в первых трех байтах пакета.

Если вы ищете "спросить", это было бы

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

Но число байтов не обязательно должно быть четным, оно должно быть степенью 2 от 1 до 4, т. Е. 1, 2 или 4, и вы можете пройти несколько тестов.

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