2017-03-05 85 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