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

Jon*_*Jon 5 sockets 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。这些选项都不是我想要的。我希望它不对这些数据包做任何事情,这样我就可以自己处理所有事情。我怎样才能做到这一点?

Zha*_*ami -1

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

\n

  • 不是答案,应该是评论 (3认同)