【问题标题】:Linux TCP accept without SYN|ACKLinux TCP 接受没有 SYN|ACK
【发布时间】:2015-03-08 21:19:09
【问题描述】:

我正在尝试编写一个 TCP 透明代理以在 Linux 上运行。

我想在收到传入连接后,启动相应的传出连接,但仅在传出连接成功时才接受(SYN|ACK)传入连接。

TCP_DEFERRED_ACCEPT 没有做我想做的事——它总是发送一个 SYN|ACK。

问题是:如何使用 Linux 套接字 API 接受 TCP 连接,但延迟 SYN|ACK?

【问题讨论】:

  • 你还要推迟以后的 ACK 吗?
  • 有什么问题?
  • [mjs] 添加了问题。
  • 你不能这样做。传入的连接在应用程序看到它们之前就由 TCP 完成。想想别的。
  • 也许我只需要使用用户空间 TCP 堆栈或其他同样 hacky 的东西。叹息。

标签: linux sockets tcp


【解决方案1】:

您可以在 Linux 上做到这一点,但不能通过套接字 API。您将使用 NFQUEUE 目标,它允许您将一些数据包重定向到用户空间并在您的程序中决定它们的命运。

显然,您仍然需要在用户空间中解析数据包,但搜索一些 TCP 标志应该不会那么难,并且不需要完整的 TCP 堆栈。而且通过这种方式,Linux 仍然可以完成整个网络的工作。

在您的情况下,您似乎可能同时使用 NFQUEUE 和经典套接字 API。第一个会给你早期的决定,后者是 TCP 流数据访问。虽然我没试过。

例如见https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 2013-07-05
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2017-10-12
    • 2021-07-21
    • 2020-10-22
    相关资源
    最近更新 更多