Это подтверждается справочной страницей pcap-filter (поиск «смещение байта»), хотя она также не предоставляет дополнительной информации.
Я думаю, что libpcap отказывается создавать программу, которая сравнивает три байта за раз, потому что классические программы BPF, которые она генерирует , не имеют инструкций для прямой поддержки таких сравнений.Он может загрузить один байт, одно половинное слово (два байта) или одно слово (четыре байта) в один из регистров и сравнить его со значением, но он не может работать со значениями длиной в три байта.
Я полагаю, что обходной путь - сравнить значение в два этапа: ether[0:2]
, затем ether[2]
.