2017-03-05 86 views
0

我已经安装了支持环回接口的npcap驱动程序。我安装它,因为我需要传入数据包以回送接口并从中读取它们。我可以很容易地在环回中使用“pcap_next_ex”读取数据包,就像我可以在以太网接口中的winpcap中执行的那样,但是当我想要使用“pcap_sendpacket”dosent工作将数据包传输到环回时,函数返回0(成功)。pcap_sendpacket dosent在“Npcap环回适配器”上工作

我通过打开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的didnt出现数据包,但在以太网接口注入是全成。

npcap是否支持回送数据包检查?

谢谢你,问候!

回答

0

您需要了解每个网络数据包(即使是回送一个数据包)都有一个方向:在发送路径(Tx)或接收路径(Rx)上。通常,当您将数据包发送到Npcap Loopback Adapter时,实际上是将其发送到Windows TCP/IP堆栈的Tx路径。当您发送Tx数据包时,您通常会等待本地主机应用程序(或协议,驱动程序等)响应它们。我不知道你为什么想要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中工作。

+0

谢谢你的回答,它花了我一段时间来消化。首先,作为npcap的开发者,你有我所有的尊重。我解决了我的问题,我无法看到wireshark上的数据包,因为他们没有以“null/loopback”头(0x02000000)开始,因为我将这些字节放在数据包的开头。我试图在环回中执行代理服务器,因为我在与路由器的以太网接口中执行该操作时出现问题。我必须学习环回很多..它很好地感谢人。 – KaxperdayTrolling

+0

现在我有一个环回的问题,我发送数据包从以太网接口到我的服务器在本地主机,这个数据包是ipv4,它们来自IP地址从以太网接口的主机例如192.168.1.145,我发送SYN数据包从127.0.0.1这样的IP源到我的本地主机服务器,但我的服务器剂量用SYN/ACK回应他忽略它们,本地主机是否只接收来自本地主机IP源的数据包?如果是的话,这会毁了我的计划,因为我需要发送IP来做NAT中的复出8) – KaxperdayTrolling

+0

也许你可以在这里帮我:http://networkengineering.stackexchange.com/questions/39501/establish-tcp-connection -to-本地主机 - 从本地网络与 - NAT – KaxperdayTrolling