问题标签 [npcap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
264 浏览

c++ - 如何重新分发同时包含 32 位 DLL 和 64 位 DLL 的软件?

我正在研究NPcap,这是一个开源的 Windows 数据包捕获软件,起源于著名的 WinPcap,并增强了更多功能。

WinPcap 的核心文件是wpcap.dll、packet.dll(在 System32 和 SysWOW64 中)和名为 npf.sys 的驱动程序。与 WinPcap 略有不同,我们的 NPcap 将提供npcap.dll、wpcap.dll、packet.dll 和驱动程序 npcap.sys。npcap.dll 是我们的 NPcap 的“wpcap.dll”,npcap.sys 是我们的 NPcap 的“npf.sys”。wpcap.dll 是我们为保持与原始 WinPcap 兼容而添加的包装器。

  1. 由于我们希望 NPcap 与 WinPcap 共存,所以我们决定将 np​​cap.dll、wpcap.dll、packet.dll 安装到软件安装路径“C:\Program Files\NPcap”,而不是 System32 和 SysWOW64 路径。

  2. 我们不想更改 wpcap.dll等文件名,因为我们希望 WinPcap 的用户软件在系统中没有 WinPcap 时能够自动使用 NPcap 的 DLL。由于 Windows 按名称查找 DLL。

  3. NPcap 希望在 64 位 Windows 中同时支持 32 位和 64 位用户软件(如 Wireshark 和 Nmap)。所以 32 位 Nmap 可以使用它的 32 位 wpcap.dll,而 64 位 Wireshark 可以使用它的 64 位 wpcap.dll。

这里我遇到了一个问题:我们的用户软件包括nmap和Wireshark,它们可以是32位或64位。32 位软件将仅使用 32 位 DLL,对于 64 位也是如此。如果我们将 NPcap 的 wpcap.dll 放入我们的安装路径,如“C:\Program Files\NPcap”,并将这个字符串添加到 PATH 环境变量中,我们不能同时添加 32 位 wpcap.dll 和 64 位 wpcap.dll在“C:\Program Files\NPcap”中,因为它们共享相同的名称。我们希望保留“wpcap.dll”名称,因为我们需要与原始 WinPcap 保持兼容。所以我们无法将“wpcap.dll”复制到 System32 和 SysWOW64,因为 WinPcap 的 wpcap.dll 已经存在还有一个问题是我们将 32 位 DLL 和 64 位 DLL 放在不同的目录中。如果我们将 DLL 分别放入“C:\Program Files\NPcap\x86”和“C:\Program Files\NPcap\x64”。我们仍然需要将这两条路径放入系统PATH环境变量中,以供其他软件调用。这两个 DLL 路径会有一个顺序。后一个路径将被前一个路径覆盖,因为 Windows 加载程序通过文件名搜索 DLL。

有没有办法不将 DLL 复制到 System32 和 SysWOW64 路径并同时解决 32 位和 64 位 DLL 解决问题?

0 投票
0 回答
519 浏览

c - 以编程方式重命名网络连接失败

我编写了一些 C++ 代码来自动重命名ncpa.cpl中的网络连接。它在 Win7 和 Win8 上运行良好,但在Win10中失败。我使用的函数是INetConnection::Rename,它的返回值为0x80071a90,意思是:

HRESULT_FROM_WIN32( ERROR_TRANSACTIONAL_CONFLICT ) :该函数尝试使用保留供另一个事务使用的名称。

但是我使用的新连接名称类似于“Npcap Loopback Adapter”,它似乎不是 Windows 的“保留”名称。

有人告诉我内置的netsh.exe工具也是用这种方式重命名接口,我试过命令为“ netsh.exe interface set interface name="Ethernet 5" newname="Npcap Loopback Adapter" ”接口“Ethernet 5”成功重命名为“Npcap Loopback Adapter”。所以我认为这种方式应该可行,我的代码一定有问题。

我想用 C/C++ 实现这个,所以不要告诉我包装 netsh.exe 命令,我想知道我的函数调用代码有什么问题?谢谢。

我的代码是:

更新:

我已经在一个循环中尝试了这个函数调用 100 次,但都失败了。

代码在github开源:

https://github.com/nmap/npcap/tree/master/packetWin7/NPFInstall,这是一个Visual Studio 2005项目,但实际上您可以在其他 Visual Studio 版本中构建它。编译 NPFInstall.exe 后,使用命令“ NPFInstall.exe -il ”安装新的环回适配器,重命名为“Npcap Loopback Adapter”,“ NPFInstall.exe -ul ”卸载。重命名适配器的来源是:LoopbackRename.cpp。我希望这可以帮助解决问题。

0 投票
1 回答
2804 浏览

c - 如何在 NDIS 6 过滤器驱动程序中启用 802.11 监控模式 (DOT11_OPERATION_MODE_NETWORK_MONITOR)?

我已将WinPcap移植到NDIS 6 过滤器驱动程序https ://github.com/nmap/npcap 。但它仍然不支持捕获所有 802.11 本机数据包(如未捕获控制和管理帧)。

我注意到有一种方法可以使用WlanSetInterface函数为无线适配器设置DOT11_OPERATION_MODE_NETWORK_MONITOR 。但是这个调用成功了(返回值OK,这个调用后我的wi-fi网络断开了)。但问题是我在使用 Wireshark 的 Wi-Fi 接口上看不到任何数据包,甚至看不到假以太网形式的 802.11 数据。所以它一定有什么问题。

我知道从 NDIS 6 和 vista 开始,启用此功能是可能的(至少 Microsoft 自己的Network Monitor 3.4支持此功能)。

所以我想知道如何为 NDIS 6 版本的 WinPcap启用监控模式?谢谢。

我的代码如下所示:


更新

Guy 已经让我清楚了 WinPcap 的高级库端应该对监视器模式做什么,本质上是设置/获取 OID 值。但是WinPcap驱动应该怎么做,需要换驱动吗?我认为WlanSetInterface调用实际上与使用 OID 请求设置DOT11_OPERATION_MODE_NETWORK_MONITOR做同样的事情?它不起作用的事实是否意味着 npf 驱动程序也需要进行某种更改?

0 投票
1 回答
1218 浏览

windows - pcap_sendpacket 将发送两个相同的数据包一次

我正在尝试通过 Winpcap API pcap_sendpacket() 发送一些自打包的以太网数据包,但在调用 API 一次后我得到了两个相同的数据包。这两个数据包可以在 Wireshark 上捕获以进行调试,具有相同的数据和连续的帧号。

环境是Win7 64bit。奇怪的是,在另一个 Win7 64 位上运行的相同代码库在 Wireshark 上只显示一个数据包。

编辑:

[2016.1.24 19:30]

对不起,由于机密,我只能发布 pcap 相关的代码部分

并且对于数据包,数据包是手工制作的,大小在 64 到 1500 之间,具有 IEEE 802.3 类型的帧头,两个 mac 字段是自定义的。

在出现错误的机器上,Winpcap的版本是“4.1.0.2980”,Wireshark是“64bit 1.12.3”;明天我会检查另一台没有错误的机器。

编辑:

[2016.1.26 10:30] Winpcap的版本是“4.1.0.2980”,和报错机器上的一样。Wireshark 的版本是“64bit 1.12.8”。两个操作系统都是 Win7 Enterprise 64bit。

0 投票
1 回答
3038 浏览

wcf - 使用 WireShark 检查本地主机上的 WCF TCP 服务器和客户端流量

我使用 WCF 在 Visual Studio 中创建了一个简单的 TCP 客户端和 TCP 服务器。我在服务器上有一个简单的操作,它接收一个整数,递增它并将它发回。它按预期工作。

我想使用 Wireshark 来监控在 localhost 上运行的客户端和服务器之间的流量。显然,这在 Windows 上安装 Wireshark 标准是不可能的,因为它无法监控环回适配器。有一个名为 Npcap 的库旨在解决这个问题,所以我安装了这个:

GitHub 上的 Npcap

当我运行 Wireshark 并选择捕获

Npcap 环回适配器

我没有看到任何 TCP 流量(仅某些 UDP 和 DHCP)。我想知道我希望看到什么?

服务器的 C# 代码在这里(我以编程方式创建它,以便您可以查看所有详细信息,App.Config 中没有配置任何内容)

0 投票
1 回答
2209 浏览

c# - 在C#中获取以太网接口的本地IP地址

有没有可靠的方法来获取 C# 中第一个本地以太网接口的 IPv4 地址?

这会找到与以太网适配器关联的本地 IP 地址,但也会找到 Npcap 环回适配器(安装用于与 Wireshark 一起使用)。

同样,使用以下代码似乎无法区分环回地址和以太网地址:

还有其他建议吗?

0 投票
1 回答
1360 浏览

c++ - 在 Visual Studio 2015 中使用 Npcap 编译 VC++ 程序

我正在 Visual Studio 2015 社区版中编译以下程序。

对于 pcap,我已经从Npcap项目@GitHub 下载了该库。我安装了用于获取 DLL 并将其 SDK 库用于头文件和链接器库的版本。DLL 的安装来自发布包 0.0.8-r2,SDK 来自 0.0.7-r9。

按照网上的几个指针如何设置环境,我有以下设置。

  1. 配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> SDK 中头文件夹的路径。
  2. 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> WIN32 _DEBUG _CONSOLE WPCAP HAVE_REMOTE
  3. 配置属性 -> 链接器 -> 常规 -> 附加库目录 -> SDK 中库文件夹的路径。
  4. 配置属性 -> 链接器 -> 输入 -> 附加依赖项 -> wpcap.lib Packet.lib

来自发行版 exe 的 DLL 安装在 C:\Windows\System32\Npcap 中。系统是 Windows 10 家庭版。

问题:

上面的程序编译得很好。

当我运行它时,它抱怨缺少 wpcap.dll 文件。我是 VS 和 VC++ 的新手,我用谷歌搜索了最简单的技术,发现刚刚解决了这个问题,我将 DLL 从 System32 复制到了生成 .exe 文件的文件夹中。

在这个 DLL 问题消失后,但现在我得到了。

我用谷歌搜索了一下,似乎混合了 64 位和 32 位 DLL。我不知道如何开始调试这个问题。

如果有人指导我解决问题,我将不胜感激。

  1. 找到 DLL 而不是复制到 exe 文件夹的更好方法(VC++ 世界中的良好做法)。
  2. 有关如何查找导致问题的 DLL 的提示。

谢谢你的时间。

0 投票
1 回答
2005 浏览

c# - 如何使用 Sharppcap 和 npcap 监视 Windows 环回适配器?

我已经安装了 npcap 驱动程序,因为我想监控 windows 环回适配器。然而,环回适配器不在 SharpPcap CaptureDeviceList 中。

我在 Wireshark 中看到了环回适配器,并且 Wireshark 能够监控环回适配器。

我应该怎么做才能使用 SharpPcap 监控环回适配器?

0 投票
1 回答
986 浏览

networking - pcap_sendpacket dosent work on "Npcap Loopback Adapter"

I have installed npcap driver which supports loopback interface. I installed it because I need to inyect packets to loopback interface and read them from it. I can easily read packets in the loopback with "pcap_next_ex" as I can do in winpcap in ethernet interfaces, but when I want to inyect a packet to the loopback with "pcap_sendpacket" dosent work, and the function returns 0 (successfull).

I verified this by opening wireshark and watching the packets incoming to the interface, when I use pcap_sendpacket on ethernet interface I can watch the packets, but in the loopback they dont appear when I tried to inject them. Why?

#xA;

I use this code on loopback interface and didnt work (but pcap_sendpacket returned always success), because in wireshark the packets didnt appear, but in ethernet interfaces the injection was successfull.

Does npcap support loopback packet inyection?

Thank you and regards!.

0 投票
2 回答
1043 浏览

wireshark - 如何让 Wireshark 忽略“线上的字节”并使用“捕获的字节”

我将 Npcap 的 NULL/loopback 捕获与 Wireshark v2.4.2 一起使用,我得到了完整的废话统计,因为出于某种原因,loopback“捕获”了太多“在线”:

在此处输入图像描述

如您所见,实际发送的数据包为 1476 字节,但 Wireshark 在网络上“捕获”了 2948 字节。这完全搞乱了各种统计数据,IO 图没有任何意义。这是一个错误(在 Wireshark 或 Npcap 环回捕获器中?)我怎样才能让 Wireshark 忽略该bytes on wire指标并bytes captured用于各种东西(如 io 图,或在“长度”列中显示它)