Выражение фильтра c/c++ pcap для пакетов ответа ARP

Я пытаюсь создать фильтр pcap только для фильтрации ответов ARP. В Wireshark я использую

arp.opcode==2

и это работает отлично. Но когда я использую его в функции pcap_compile, он выдает исключение - синтаксическую ошибку. Я пробовал также эти варианты:

arp.opcode = 2
arp.opcode 2
arp opcode 2
arp.reply
arp reply

и ничего не работает. Я пытался погуглить, но безуспешно. Возможно ли вообще фильтровать эти конкретные пакеты?


person Tibor Mikita    schedule 16.04.2017    source источник
comment
Просто используйте C или C++. Не отмечайте пост обоими. Также добавьте код, без которого мы не сможем помочь.   -  person Shridhar R Kulkarni    schedule 16.04.2017
comment
Фильтры pcap не так сложны, как выражения, поддерживаемые Wireshark. Документация, например. linux.die.net/man/7/pcap-filter. Возможно, вам лучше просто фильтровать трафик arp, а затем проверять ответы в коде; в противном случае вам нужно будет исследовать формат пакета arp на уровне байтов.   -  person Alan Stokes    schedule 16.04.2017
comment
@AlanStokes Да, я понял. Я хотел сделать это проще, но я думаю, что это невозможно сделать. Спасибо за ответ!   -  person Tibor Mikita    schedule 16.04.2017


Ответы (1)


Я подозреваю, что это должно работать, основываясь на структуре пакета из Википедии:

arp [6:2] = 2

Это также предлагается в этом ответе: https://stackoverflow.com/a/40199540/212870

(К сожалению, легче найти ответ, когда вы найдете ответ.)

person Alan Stokes    schedule 16.04.2017