2010-11-28 68 views
5

我试图用libpcap监听两个设备,但我仍然无法找出如何去做。我试图将设备设置为“任何”,但它没有工作。我正在尝试编写DHCP中继代理,所以我需要听取eth0和eth1。一次用libpcap监听两个设备

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

有什么办法如何做到这一点,或者我应该离开libpcap,并试图用原始套接字来做到这一点?

回答

3

您需要在单独的线程中运行pcap_loop(),每个接口一个,我们这样做,并且它可以工作。

libpcap的某些部分虽然至少是pcap_setfilter(),但不是线程安全的,因此请提供自己的锁定环境。

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

+0

谢谢:)我结束了使用套接字:) – Pirozek 2010-12-04 23:49:40