pcap_compile()
компилирует строку в программу фильтра в виде структуры bpf_program
. Теоретически я мог бы сэкономить скомпилированную форму программы и предоставить ее pcap_setfilter()
на другом сетевом интерфейсе или даже на другой машине.Насколько переносимым является выход pcap_compile?
Будет ли это работать? Является ли форматы bpf_program
переносимыми для разных интерфейсов? Различные процессы? Различные архитектуры? Или безопаснее компилировать выражение каждый раз, когда я хочу его использовать?
Основываясь на существовании pcap_open_dead()
Я предполагаю, что он несколько портативен, но то, что безопасно, а что нет, похоже, не указано в документации.
Спасибо, это очень полезно. Чтобы уточнить: как насчет разных интерфейсов/устройств на одной машине? – benzado
Различные интерфейсы на одной машине должны быть в порядке, я думаю. Однако я не совсем уверен в всех реализациях. Я на самом деле колеблюсь в отношении разных/видов/интерфейсов, таких как ethernet/loopback/ieee1394. У меня есть подозрение, что это может не сработать, хотя прошло уже больше года с тех пор, как я взломал какой-либо из этих кодов, и все течет из моей головы. – McPherrinM
Различные интерфейсы * с одним и тем же типом заголовка канального уровня * могут запускать один и тот же код BPF. Различные интерфейсы с * разными типами заголовков канального уровня, например. Ethernet против 802.11 по сравнению с PPP, может * НЕ запускать один и тот же код BPF (ну, они могут запускать один и тот же код BPF, но код будет работать некорректно как фильтр на интерфейсах с другим типом заголовка канального уровня из тот, для которого был скомпилирован код БНФ). – 2012-01-23 23:25:46