
我正在開發一個 TCP/IP 堆疊,該堆疊目前使用原始套接字從 Linux 用戶空間運行。
為了測試這一點,我需要停用特定連接埠的 Linux 核心 TCP 程式碼,以便核心不會幹擾我的實作(例如,核心回應握手)。
我已經參考過這,它表示原始套接字繞過 netfilter,但在我的測試過程中,原始套接字未收到封包。
經過更多研究後我發現我的 AF_INET 套接字仍在 TCP/IP 堆疊中,但是我不想實現乙太網路幀。
是否有辦法在不使用 AF_PACKET 的情況下停用特定連接埠上的核心處理?
編輯:
我正在創建我的套接字,如下所示socket(AF_INET, SOCK_RAW, IPPROTO_TCP)
:然後我設定 HDRINCL:setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))
答案1
您可以使用 IPTables 中的 RAW 表來執行此操作。使用以下規則:
iptables -t raw -A PREROUTING -p tcp --dport <your port> -j DROP
這應該會導致核心忽略您的資料包,並且不會回應握手。