Прослушивание на двух устройствах одновременно с libpcap - PullRequest
5 голосов
/ 28 ноября 2010

Я пытаюсь слушать на двух устройствах с libpcap, но я все еще не могу найти, как сделать трюк.Я пытался установить устройство на «любое», но оно не работает.Я пытаюсь написать агент ретрансляции dhcp, поэтому мне нужно прослушать eth0 и eth1.

Я попытался создать два pcap_loops, каждый с различным устройством и обработчиком, но работает только первый pcap_loop, второй игнорируется.

Есть ли способ сделать это или я должен покинуть libpcap и попробовать сделать это с необработанными сокетами?

1 Ответ

3 голосов
/ 29 ноября 2010

Вам нужно будет запустить pcap_loop () в отдельных потоках, по одному для каждого интерфейса, мы это делаем, и это работает.

Некоторые части libpcap, хотя и не безопасны для потоков, atleast pcap_setfilter (), так что обеспечьте свою собственную блокировку вокруг этого.

Если вы не хотите использовать потоки, у вас будетобеспечить цикл обработки событий самостоятельно, где вы отслеживаете файловые дескрипторы каждого устройства с помощью команды select / poll или аналогичной.Вы можете получить дескриптор файла для дескриптора устройства с помощью pcap_get_selectable_fd ().

...