pcap_handler 回调仅在使用 npcap v0.9991 时包含空数据包

pcap_handler callback contains empty packets only when using npcap v0.9991

我有一些代码应该从以太网适配器捕获数据。我正在使用以下步骤获取数据(在确定格式为“rpcap://\Device\NPF_{0C5[...]C89}”的设备名称后):

deviceHandle = pcap_open(device_name, 65536, 1 /* promiscous */, 100, NULL, errbuf)

然后 运行 结束一个循环(直到应该停止捕获):

pcap_dispatch(deviceHandle, -1, pcap_handler, userHandle /* unsigned char* to user handle */)

当 运行使用从 Windows\System32\Npcap 文件夹加载的 npcap dll“wpcap.dll”进行此操作时,我收到对 pcap_handler 回调的调用,但回调中的所有参数都是始终为零:

header->caplen == 0
header->len == 0
header->ts.tv_sec == 0
header->ts.tv_usec == 0

unsigned char* 数据不是 NULL 但它指向的内存仅为零。

当我 运行 使用来自“Program Files (x86)\Win10Pcap\x64”(当前最新版本)的 Win10Pcap v10.2.5002 wpcap.dll 完全相同的代码时,一切正常并且我正确地获取了捕获的数据。该代码大约在一年前运行,因此可能对 npcap 进行了更改,导致行为有所不同,但我找不到回调中没有提供数据的原因。

npcap 安装和 dll 是 Wireshark v3.2.4 64 位安装的一部分,当 运行在同一以太网适配器上使用 Wireshark 并捕获数据时,数据会在 Wireshark 中正确显示,因此 npcap 库是在那种情况下工作正常。

谁能告诉我问题出在哪里?我正在 运行 在 64 位 Windows 10 上使用代码。因为它在工作之前可能在 npcap v0.9991 中发生了变化,它正在改变行为或要求以获取我捕获的数据我不知道是哪个问题引起的。

此致, 贡纳尔

这可能是 Npcap issue #178,它已在 Npcap 0.9992 中修复,因此它也应该在当前版本中修复(截至我撰写本文时为 0.9994)。升级您的 Npcap 安装。