pcap_sendpacket 不适用于 "Npcap Loopback Adapter"

pcap_sendpacket dosent work on "Npcap Loopback Adapter"

我已经安装了支持loopback接口的npcap驱动。我安装它是因为我需要将数据包 inyect 到环回接口并从中读取它们。我可以使用 "pcap_next_ex" 轻松读取环回中的数据包,就像我在以太网接口中的 winpcap 中所做的那样,但是当我想使用 "pcap_sendpacket" dosent 工作将数据包 inyect 到环回时,函数 returns 0(成功)。

我通过打开 wireshark 并观察传入接口的数据包来验证这一点,当我在以太网接口上使用 pcap_sendpacket 时我可以观察数据包,但是在环回中当我试图注入它们时它们不会出现.为什么?

//The array which contains the data of the test package

UCHAR packet[] = "\x.."; 

//loopback adapter is already opened here

for (int i = 0; i < 100; i++)
    printf("%d ", pcap_sendpacket(loopbackAdapter, packet, sizeof(packet)));

我在环回接口上使用此代码但没有工作(但 pcap_sendpacket 总是返回成功),因为在 wireshark 中没有出现数据包,但在以太网接口中注入成功。

npcap 是否支持环回数据包输入?

谢谢和问候!

您需要了解每个网络数据包(即使是环回数据包)都有一个方向:发送路径 (Tx) 或接收路径 (Rx)。通常,当你向 Npcap Loopback Adapter 发送数据包时,实际上是将其发送到 Windows TCP/IP 堆栈的 Tx 路径。当您发送 Tx 数据包时,您通常会等待本地主机应用程序(或协议、驱动程序等)响应它们。

我不知道你为什么要inject packets to loopback interface and read them from it。 Npcap 在这部分的低级逻辑只是不让当前会话 (a pcap_t) 接收此会话注入的数据包。但是其他会话可以看到它们,这就是 Wireshark 可以看到您注入的数据包的原因。

我只是不知道你为什么要这样做。您似乎不希望任何其他应用程序响应这些数据包。但作为一种解决方法,我认为您可以通过将数据包注入 Rx 路径来获得您想要的东西。通过向Rx发送数据包,意味着愚弄Windows相信这些数据包是从外面收到的。我不记得我是如何实现的,但同一个会话应该能够在 Rx 中看到这些数据包。

我们没有非常清楚地记录 Rx 功能。版本中只有一些描述:v0.05-r6 and v0.05-r7, and an example here: https://github.com/hsluoyz/UserBridge。他们甚至应该在最新的 Npcap 中工作。