c++ - pcap_handler 回调仅在使用 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 问题 #178,已在 Npcap 0.9992 中修复,因此它也应该在当前版本中修复(截至我撰写本文时为 0.9994)。升级你的 Npcap 安装。
推荐阅读
- angular - 为什么我不能将 AngularMaterial Design 更改为我需要的设计?
- node.js - 是什么阻止了黑客将更新版本的包发布到 NPM?
- java - 如何通过 Docker-java 获取现有容器 ID 的列表
- reactjs - ReactJS - CSSTransition - 超时后div消失
- web-config - 重写映射中的 web.config 页面重定向不适用于 HTTP 到 HTTPS 规则
- html - 如何使用 CSS 仅选择具有 7 个外部元素的第一个元素
- matlab - 如何在 MATLAB 中重新缩放和保存图像?
- apache-kafka - Kafka Connect JDBC sink - 存储来自 KSQL 的聚合数据
- javascript - 如何访问 DOM 对象的 __reactEventHandlers 属性?
- sql - 在插入期间连接表以获取唯一 ID