如何防止Linux内核响应传入的TCP数据包?

时间:2013-06-28 07:41:16

标签: linux sockets tcp

对于我的应用程序,我需要拦截某些TCP / IP数据包,并通过自定义通信链路(而不是以太网)将它们路由到不同的设备。我需要所有TCP控制数据包和完整的标头。我已经想出如何通过socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));使用原始套接字来获取这些。这很好用,并允许我附加过滤器,只看到我感兴趣的TCP端口。

但是,Linux也会看到这些数据包。默认情况下,它在收到不知道的TCP端口号的数据包时发送RST。这并不好,因为我打算稍后发回回复。如果我使用socket(PF_INET, SOCK_STREAM, 0);listen()在同一端口上打开第二个“普通”套接字,则Linux会向传入的TCP数据包发送ACK。这些选项都不是我想要的。我想让它用这些数据包做 nothing 所以我可以自己处理所有事情。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

使用socatLink to manual

答案 1 :(得分:-1)

我想做同样的事情。我的理由是从安全角度来看......我想构建一个Tarpit应用程序。我打算将TCP流量从某些源IP转发到Tarpit。 Tarpit必须收到ACK。它将以自己的SYN / ACK回复。我不希望内核做出响应。因此,原始套接字将无法工作(因为提供的TCP数据包是teed),我还需要实现一个Divert套接字。到目前为止,这就是我所知道的......还没有实施。