我正在尝试编写一个运行在Linux上的TCP透明代理。
我希望在收到传入连接时,启动相应的传出连接,但如果传出连接成功,则仅接受(SYN|ACK)传入连接。
TCP_DEFERRED_ACCEPT不会执行我想要的操作--它总是发送SYN|ACK。
问题是:如何接受TCP连接,但使用Linux套接字API延迟SYN|ACK?
发布于 2015-03-19 03:59:43
您可以使用Linux来实现这一点,但不能通过套接字API实现。您可以使用NFQUEUE目标,它允许您将一些数据包重定向到用户空间,并在您的程序中决定它们的命运。
显然,您仍然需要在用户空间中解析数据包,但是搜索几个TCP标志应该不是那么难,也不需要完整的TCP堆栈。通过这种方式,Linux仍然可以完成整个网络工作。
在您的情况下,似乎可以同时使用NFQUEUE和经典套接字API。前者将为您提供早期决策,后者将提供TCP流数据访问。虽然我从来没试过。
例如,参见https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/。
https://stackoverflow.com/questions/28932015
复制相似问题