Linux TCP接受没有SYN | ACK

时间:2015-03-08 21:19:10

标签: linux sockets tcp

我试图编写一个TCP透明代理,以便在Linux上运行。

我希望在收到传入连接后启动相应的传出连接,但只有在传出连接成功时才接受(SYN | ACK)传入连接。

TCP_DEFERRED_ACCEPT没有做我想做的事 - 它总是发送一个SYN | ACK。

问题是:我如何接受TCP连接,但推迟使用Linux套接字API进行SYN | ACK?

1 个答案:

答案 0 :(得分:0)

您可以使用Linux,但不能通过套接字API。你可以使用NFQUEUE目标,它允许你将一些数据包重定向到用户空间,并从你的程序中决定他们的命运。

很明显,你仍然需要解析用户空间中的数据包,但搜索一些TCP标志不应该那么难,不需要完整的TCP堆栈。这样Linux仍然可以完成整个网络工作。

在您的情况下,您似乎可以使用NFQUEUE和经典套接字API。第一个将为您提供早期决策,后者将为TCP流数据访问。虽然我从未尝试过。

例如,请参阅https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/