【问题标题】:How do I prevent Linux kernel from responding to incoming TCP packets?如何防止 Linux 内核响应传入的 TCP 数据包?
【发布时间】:2013-06-25 22:18:40
【问题描述】:

对于我的应用程序,我需要拦截某些 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。这些选项都不是我想要的。我希望它对这些数据包什么都不做,这样我就可以自己处理所有事情了。我怎样才能做到这一点?

【问题讨论】:

    标签: linux sockets tcp


    【解决方案1】:

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

    【讨论】:

    • 不是答案,应该是评论
    猜你喜欢
    • 2012-12-19
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2017-02-26
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多