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

Posted

技术标签:

【中文标题】如何使用 Sharppcap 和 npcap 监视 Windows 环回适配器?【英文标题】:How to monitor the windows loopback adapter using sharppcap and npcap? 【发布时间】:2017-06-27 03:48:33 【问题描述】:

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

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

如何使用 SharpPcap 监控环回适配器?

【问题讨论】:

很遗憾,Winpcap 无法捕获环回数据包,因为这些数据包未绑定到任何适配器 @Ksv3n:你说得对,WinPcap 做不到。但是 Npcap 可以. @JeroenMostert:Ty,很高兴知道这一点 【参考方案1】:

我已经帮助你在他们的 GitHub 存储库中创建了一个问题:https://github.com/chmorgan/sharppcap/issues/15

请等待他们的答复。

更新:

我安装了最新的 Npcap 0.80 并选中了 Install Npcap in WinPcap API-compatible Mode 选项,并在 SharpPcap 存储库中运行了 Example01.IfList 示例,输出为:

SharpPcap 4.2.0.0, Example1.IfList.cs

The following devices are available on this machine:
----------------------------------------------------

interface: Name: rpcap://\Device\NPF_9ADACD44-ECFF-45E2-BD5E-3491DEBA711F
Description: Network adapter 'NdisWan Adapter' on local host
Flags: 0



interface: Name: rpcap://\Device\NPF_8A300A14-CA5A-4A3C-B52B-7516661B4CDA
Description: Network adapter 'NdisWan Adapter' on local host
Flags: 0



interface: Name: rpcap://\Device\NPF_44DB6B7A-661D-4FA3-925E-6287EA48D3F6
Description: Network adapter 'NdisWan Adapter' on local host
Flags: 0



interface: Name: rpcap://\Device\NPF_F0353155-69D0-4611-AB2A-EE864BE0ADD9
FriendlyName: Local Area Connection* 19
GatewayAddress: 0.0.0.0
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::cd59:f5d:81cb:989d
Netmask:
Broadaddr:

Addresses:
Addr:      fe80::cd59:f5d:81cb:989d
Netmask:
Broadaddr:

Addresses:
Addr:      HW addr: E094678FFF3F

Flags: 0



interface: Name: rpcap://\Device\NPF_385F30D0-9166-45D3-BBC6-F1D9C5300AF9
FriendlyName: Wi-Fi
GatewayAddress: 192.168.0.1
Description: Network adapter 'Microsoft' on local host
Addresses:
Addr:      fe80::eddc:63ca:cf19:aecd
Netmask:
Broadaddr:

Addresses:
Addr:      192.168.0.109
Netmask:   255.255.255.0
Broadaddr: 0.0.0.0

Addresses:
Addr:      HW addr: E094678FFF3E

Flags: 0



interface: Name: rpcap://\Device\NPF_1E6769B9-ED4A-454D-A921-EECDA220ADA1
FriendlyName: Npcap Loopback Adapter
GatewayAddress: 0.0.0.0
Description: Network adapter 'MS NDIS 6.0 LoopBack Driver' on local host
Addresses:
Addr:      fe80::b1cb:57f6:4ebc:6359
Netmask:
Broadaddr:

Addresses:
Addr:      0.0.0.0
Netmask:   255.0.0.0
Broadaddr: 255.255.255.255

Addresses:
Addr:      HW addr: 02004C4F4F50

Flags: 1



Hit 'Enter' to exit...

显然最后一个适配器是Npcap Loopback Adapter。我不知道为什么用户无法使用 SharpPcap 监控 Npcap Loopback Adapter。我会在 *** 中回复他关于我的反馈。

我能想到两个可能的原因:

    用户在安装 Npcap 时没有选择Support loopback traffic ("Npcap Loopback Adapter" will be created) 选项。 用户也安装了 WinPcap,并且 Npcap 安装时 Install Npcap in WinPcap API-compatible Mode 选项未选中。这样SharpPcap就只能识别WinPcap,使用原来的WinPcap DLL,根本不支持Npcap Loopback Adapter

我的建议是:

    如果已安装 WinPcap,请将其卸载。 安装最新的 Npcap 0.80,同时选中 Support loopback traffic ("Npcap Loopback Adapter" will be created)Install Npcap in WinPcap API-compatible Mode 选项。

现在用户应该可以通过 SharpPcap 界面看到Npcap Loopback Adapter

【讨论】:

我按照建议做了,在重新安装 Npcap 后,我确实在 SharpPcap 中看到了环回适配器。我觉得和第一次安装 Npcap 的不同之处在于我现在开启了“WinPcap API 兼容模式”。但是,当我现在运行 SharpPcap Example6 时,在第 86 行出现异常“未实现 Null 的 LinkLayer”。PacketDotNet.Packet.ParsePacket 引发此异常,因为 e.Packet.LinkLayerType == null。知道如何构造(tcp)数据包吗? 我尝试将 ParsePacket 的第一个 (LinkLayer) 参数更改为 Loop、Ethernet 和 Raw,但这些都不起作用(Ethernet 给出 null TcpPackets,其他给出异常) LinkLayer异常也是SharpPcap的一个bug。我也向他们报告了。在他们修复它之前,您有一个临时解决方法:首先卸载 Npcap。然后重新安装Npcap,可以看到Use DLT_NULL as the loopback interface' link layer protocol instead of DLT_EN10MB选项被勾选,灰色(无法更改)。现在请取消选中Support loopback traffic ("Npcap Loopback Adapter" will be created) 选项并再次检查。您会发现现在可以更改 DLT_NULL 选项。取消选中并安装。 (所以 Loopback 选项被选中并且 DLT_NULL 选项被取消选中) 现在 Npcap 将在 Npcap Loopback Adapter 上提供以太网数据包,SharpPcap 应该可以工作了。

以上是关于如何使用 Sharppcap 和 npcap 监视 Windows 环回适配器?的主要内容,如果未能解决你的问题,请参考以下文章

c# 使用sharpPcap制作的网络监视器应用程序,每次调用应显示一个msgbox的方法每次调用显示多个msgbox

如何使用 SharpPcap 捕获 HTTP 数据包

在 C# 中使用 SharpPCap 解析时,如何判断是不是以有限的快照长度捕获了 PCAPNG 文件?

如何通过Sharppcap获得连续数据包?

SharpPcap - 传入的数据包被丢弃

.net 数据包捕获:pcap.net 与 Sharppcap