2010-11-28 6 views
5

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

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

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

ответ

3

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

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

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

+0

Спасибо :) Я закончил использование сокетов :) – Pirozek 2010-12-04 23:49:40