pcap_sendpacket dosent工作在“Npcap环回适配器”

时间:2017-03-05 12:53:24

标签: networking interface loopback winpcap

我安装了支持环回接口的npcap驱动程序。我安装它是因为我需要将数据包传入环回接口并从中读取它们。我可以使用“pcap_next_ex”轻松读取环回中的数据包,就像我在以太网接口中的winpcap中所做的那样,但是当我想通过“pcap_sendpacket”剂量工作将数据包传入环回时,函数返回0(成功)。 / p>

我通过打开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)));

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

npcap是否支持环回数据包?

谢谢你,问候!。

1 个答案:

答案 0 :(得分:0)

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

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

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

我们没有非常清楚地记录Rx功能。版本中只有一些说明:v0.05-r6v0.05-r7,以及此处的示例:https://github.com/hsluoyz/UserBridge。它们应该在最新的Npcap中工作。