【问题标题】:Modify socket structure to send packets to another IP修改套接字结构以将数据包发送到另一个 IP
【发布时间】:2015-04-23 10:21:54
【问题描述】:

假设有一个客户端程序在端口 10000 上维护与服务器的 TCP 套接字连接。

是否可以在不使用任何类型的系统调用以及不使用iptables 的情况下永久修改目标IP 等套接字结构而不关闭或重新加载套接字和客户端程序?

我想在不中断连接的情况下将数据包重定向到另一台机器进行分析。

假设我有root权限并且可以修改内核或添加内核模块。

主机是 Ubuntu Linux。

编辑:我很清楚我不能在应用层做到这一点,所以我正在寻找直接修改内核和 TCP/IP 堆栈的方法,这可能吗?该信息必须保存在内存中的某个位置。

【问题讨论】:

    标签: linux sockets tcp linux-kernel


    【解决方案1】:

    应用程序绝对无法通过标准 API 修改 TCP 套接字连接。这样做会破坏与连接相关的大部分状态,并且第三台机器上的 TCP 肯定不会接受这些数据包。

    也就是说,您可以在 IP 层(通过 iptables)重写目标,使其进入第三台机器,该机器将捕获它(再次在 IP 层),读取并分析内容,恢复原始目标,并转发。

    如果第三台机器实际上位于源机器和目标机器之间的网络上,您甚至不必进行任何 IP 目标重写——您可以在数据包流经时捕获它们。这是一个“man in the middle”操作。

    最后,您可以让路由器将所有数据包转发到连接到机器#3 的以太网端口,然后捕获(始终在 IP 层)广播到它的数据包的副本。或者使用“哑集线器”(相对于“智能交换机”)将所有数据包转发到所有端口,以将源或目标与机器 #3 连接。

    任何数据包嗅探器(例如WireShark)都可以处理最后两个建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      相关资源
      最近更新 更多