我需要“手動”創建一個 TCP 會話,而不使用該connect()功能。我曾嘗試使用 RAW 套接字。但在這種情況下,我只得到傳入 IP 資料包的副本。原始傳入的資料包會通過內核并生成一個損壞我的協議的 ACK 回應資料包。
接下來,變體 2,我可以撰寫一個虛擬 eth 介面驅動程式(內核模塊)并使用 iptables 將傳入流量路由到它。但是機器上有一個修補過的非原始(非 vanila)內核。模塊與內核的正常鏈接是不可能的。
變體 3。我還嘗試不為 NIC 介面分配 IP 地址。在這種情況下,內核中的網路 TCP/IP 層模塊未激活,并且可以使用PF_PACKETsocket() 函式中的套接字域型別在鏈路(以太網)層上生成和接收任意 IP 資料包。但此時,任何其他使用 TCP/IP 協議的應用程式都無法運行。
如何通過其他方式解決這個問題?
如果可以攔截從網路介面到內核的資料包,即攔截SKBuf緩沖區,那就太好了。但我不知道如何實作它。
uj5u.com熱心網友回復:
顯然你正在嘗試創建一個隧道。與其嘗試劫持現有介面,不如創建隧道的正確方法是使用內核模塊或 TUN/TAP 創建新介面。但是,隧道通常用于接收在運行隧道軟體的機器上產生的流量,或者至少是通過它路由的。這意味著您還必須設定內核以將流量路由到您的隧道。
您可以創建一個新界面作為
如果您希望主機也能夠與運行隧道軟體的機器對話——無需通過隧道軟體——那么你可以選擇在網橋上放置一個 IP 地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452966.html
