WinPcap不会收集任何数据包,直到Wireshark启动
问题描述:
我试图收集我的以太网上的2级数据包。该网络上唯一发生的事情是设备正在吐出ieee1722/AVB帧。 我已经安装了WinPcap,并开始使用most basic example。对pcap_next_ex
的每个呼叫返回0,表示没有收到数据包。我打开了Wireshark,并开始在该接口上进行监视 - 在那里,我的程序开始接收数据包。WinPcap不会收集任何数据包,直到Wireshark启动
我试过这两个接口,内置英特尔I218-LM和廉价的以太网到USB加密狗。连接到AVB网络的两个接口都不会返回帧,除非我在该接口上开始在Wireshark中进行监视。如果没有Wireshark的协助,它们都会在连接到该网络时显示随机的办公室以太网流量。
我也打过电话pcap_set_datalink
pcap_open
后设置链路类型为两DLT_EN10MB
(无变化)和DLT_RAW
(函数返回错误)。其他类型似乎都与我无关。
当然,Wireshark本身使用WinPcap,但我无法弄清楚Wireshark是如何做到这一点的。这里发生了什么?
更新:我注意到当我的应用程序退出时,它也停止了Wireshark上的捕获。我可以同时处于活动状态,但我的应用程序需要先开始捕捉。我发现Wireshark在pcap_finalldevs_ex
或pcap_open_live
被调用后停止捕获。我找不到Wireshark是如何初始化与我不同的,尽管他们的代码由于所有的条件启用/禁用块而很难遵循。
答
事实证明,我已经安装了Windows的Nmap的一个非常旧的版本,其中包括可用于代替winpcap的npcap。我卸载npcap,重新启动,现在我的应用程序工作得很好。
我假设您已经查看过Wireshark源代码,但如果您无法弄清楚Wireshark正在做什么,那么您可能需要查看WinDump源代码?请参阅:https://www.winpcap.org/windump/install/default.htm,具体来说,源代码位于:https://www.winpcap.org/windump/install/bin/windump_3_9_5/WDumpSrc_3_9_5.zip –
I有 - 这就是让我尝试'pcap_set_datalink'的原因。我没有太紧密地跟随所有事情,所以我最终会回到那里。 – flndr
我刚刚尝试过WinDump,它和我的程序具有相同的行为 - 在Wireshark中重新启动捕获之前没有数据包。我认为这意味着我不是一个愚蠢的监督问题。 – flndr