2015-03-08 114 views
0

我正在嘗試編寫一個TCP透明代理以在Linux上運行。Linux TCP接受沒有SYN | ACK

我希望在收到傳入連接時啓動相應的傳出連接,但只有在傳出連接成功時才接受(SYN | ACK)傳入連接。

TCP_DEFERRED_ACCEPT沒有做我想做的事 - 它總是發送SYN | ACK。

現在的問題是:我如何接受TCP連接,但推遲使用Linux套接字API的SYN | ACK?

+0

你打算推遲遲些ACK嗎? – KillianDS 2015-03-08 21:21:59

+0

什麼問題? – mjs 2015-03-08 21:22:00

+0

[mjs]添加了該問題。 – 2015-03-08 21:31:26

回答

0

你可以用Linux做到這一點,但不能通過套接字API。您可以使用NFQUEUE目標,它允許您將一些數據包重定向到用戶空間,並從您的程序中決定他們的命運。

明顯地,你仍然必須解析用戶空間中的數據包,但是搜索幾個TCP標記不應該那麼困難並且不需要一個完整的TCP堆棧。這樣Linux仍然可以完成整個網絡工作。

在你的情況下,你似乎可能使用NFQUEUE和古典套接字API。第一個將爲您提供早期決策,即後一個TCP流數據訪問。雖然我從來沒有嘗試過。

例如參見https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/

相關問題