当前位置: 技术问答>linux和unix
libpcap截获两个网卡上的数据包
来源: 互联网 发布时间:2016-03-14
本文导语: 如何用libpcap截获两个网卡上的数据包?请高手指点! | 看楼主的提问,感觉应该对捕获一个网卡的报文是没有问题。 那么两个为什么会有问题呢?我猜想是因为pcap_loop这个函数的问题,因为一...
如何用libpcap截获两个网卡上的数据包?请高手指点!
|
看楼主的提问,感觉应该对捕获一个网卡的报文是没有问题。
那么两个为什么会有问题呢?我猜想是因为pcap_loop这个函数的问题,因为一调用pcap_loop开始抓报,程序就在这儿阻塞了。
方案一:
采用pthread将程序写成多线程的方式,比如将pcap_loop eth1放在子线程里面调渡 pcap_loop eth0还是在主线程处理。也可以写成主线程不做报文捕获,写多个子线程,每个子线程捕获一个网口。楼主可以Google搜一下pthread,会有很多的这方面的介绍的。我就不赘述了。
方案二:
看看你的程序是否可以用pcap_next来做,这样可能两个网口抓包的实时性就不好了。
方案三:
别用libpcap了,用Linux带的PACKET Socket 参考man 7 packet。这样就可以打开packet socket,然后用Select来处理就OK了。
本想写个例子的,无奈今天太晚了,而且还有个胶片没写完……
那么两个为什么会有问题呢?我猜想是因为pcap_loop这个函数的问题,因为一调用pcap_loop开始抓报,程序就在这儿阻塞了。
方案一:
采用pthread将程序写成多线程的方式,比如将pcap_loop eth1放在子线程里面调渡 pcap_loop eth0还是在主线程处理。也可以写成主线程不做报文捕获,写多个子线程,每个子线程捕获一个网口。楼主可以Google搜一下pthread,会有很多的这方面的介绍的。我就不赘述了。
方案二:
看看你的程序是否可以用pcap_next来做,这样可能两个网口抓包的实时性就不好了。
方案三:
别用libpcap了,用Linux带的PACKET Socket 参考man 7 packet。这样就可以打开packet socket,然后用Select来处理就OK了。
本想写个例子的,无奈今天太晚了,而且还有个胶片没写完……
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。