如何防止Linux内核对传入的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。这两种选择都不是我想要的。我希望它对这些数据包不做任何事情,这样我就可以自己处理所有事情。我怎样才能做到这一点?

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

最新更新