Почему Bpf допускает эфир [0: 2] и эфир [0: 4], но не эфир [0: 3]? - PullRequest
1 голос
/ 15 апреля 2019

Почему Berkeley Packet Filter позволяет фильтровать по эфиру [0: 2] и эфиру [0: 4], но не по эфиру [0: 3], который является поставщиком? tcpdump 'ether[0:3] = 0x000000' возвращается с tcpdump: data size must be 1, 2, or 4

1 Ответ

1 голос
/ 15 апреля 2019

Это подтверждается справочной страницей pcap-filter (поиск «смещение байта»), хотя она также не предоставляет дополнительной информации.

Я думаю, что libpcap отказывается создавать программу, которая сравнивает три байта за раз, потому что классические программы BPF, которые она генерирует , не имеют инструкций для прямой поддержки таких сравнений.Он может загрузить один байт, одно половинное слово (два байта) или одно слово (четыре байта) в один из регистров и сравнить его со значением, но он не может работать со значениями длиной в три байта.

Я полагаю, что обходной путь - сравнить значение в два этапа: ether[0:2], затем ether[2].

...