使用libpcap一次监听两个设备

时间:2010-11-28 16:53:50

标签: c network-programming pcap libpcap

我正在尝试使用libpcap监听两个设备,但我仍然无法找到如何做到这一点。我试图将设备设置为“任何”但它不起作用。我正在尝试编写dhcp中继代理,所以我需要监听eth0和eth1。

我尝试创建两个pcap_loops,每个都有不同的设备和处理程序,但只有第一个pcap_loop有效,第二个被忽略。

有什么方法可以做到这一点,还是应该离开libpcap并尝试使用原始套接字?

1 个答案:

答案 0 :(得分:3)

你需要在不同的线程中运行你的pcap_loop(),每个接口一个,我们这样做,它的工作原理。

libpcap的某些部分虽然不是线程安全的,至少是pcap_setfilter(),所以提供你自己的锁定。

如果您不想使用线程,则必须自己提供事件循环,您可以使用select / poll或类似方法监视每个设备的文件描述符。您可以使用pcap_get_selectable_fd()获取设备句柄的文件描述符。