2017-05-30 98 views
0

我的Linux系統中有兩個接口 - eth0和eth1。我在eth0上打開了一個原始套接字,並且正在監聽它的傳入數據包。當數據包來自eth0時,在將以太網報頭(特別是目的MAC地址改爲eth1的MAC地址)更改後,我將其轉發給eth1。數據包現在應該被接口接受併發送給內核進行進一步處理,並最終傳送給正在等待的應用程序。但由於某種原因,數據包到達eth1(正如我從wireshark中看到的那樣),但應用程序沒有收到它(應用程序是ping,我沒有看到ping回覆)。如何發送數據包到內核?

如何將數據包發送到eth1,使其被接受併發送到內核?

+1

如果您可以通過wireshark觀察到在eth1接收到回顯請求,那麼內核的確在處理它。和其他一切一樣,Wireshark依賴於內核。如果有一個應用程序正在監聽這些數據包,但它們沒有收到它們,那麼你的防火牆就會成爲我的第一個嫌疑犯。 –

+1

當您更改MAC地址時,是否重新計算並更換了FCS?另外,如果三層地址在該接口上不匹配,則新接口上的堆疊將丟棄數據包。這需要更改目標IP地址並重新計算IPv4標頭CRC(IPv6在IP標頭上沒有CRC)。當您更改IP地址時,TCP或UDP僞標題會發生變化,您也必須更改該標題。 –

+0

@JohnBollinger我正在使用ubuntu和ufw處於非活動狀態。我應該檢查另一層防火牆嗎? –

回答

1

有可能是這裏一個誤區:

如果通過原始套接字接口上發送數據包,你的情況的eth1,它將被視爲本地的內核,而不管其MAC的地址,但會將接口留給網絡(使用自己的mac地址作爲目的地)。這是你用wireshark觀察的結果。

如果你想通過你的內核要處理的數據包,將其發送到LO - 接口(環回接口),這是專門用於這一目的。

+0

我是否將完整的數據包發送到L2接口的L2接口?或只是L3頭+有效載荷? –