我试图编写一个TCP透明代理,以便在Linux上运行。
我希望在收到传入连接后启动相应的传出连接,但只有在传出连接成功时才接受(SYN | ACK)传入连接。
TCP_DEFERRED_ACCEPT没有做我想做的事 - 它总是发送一个SYN | ACK。
问题是:我如何接受TCP连接,但推迟使用Linux套接字API进行SYN | ACK?
答案 0 :(得分:0)
您可以使用Linux,但不能通过套接字API。你可以使用NFQUEUE目标,它允许你将一些数据包重定向到用户空间,并从你的程序中决定他们的命运。
很明显,你仍然需要解析用户空间中的数据包,但搜索一些TCP标志不应该那么难,不需要完整的TCP堆栈。这样Linux仍然可以完成整个网络工作。
在您的情况下,您似乎可以使用NFQUEUE和经典套接字API。第一个将为您提供早期决策,后者将为TCP流数据访问。虽然我从未尝试过。
例如,请参阅https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/。