AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 531091
Accepted
RaveTheTadpole
RaveTheTadpole
Asked: 2013-08-15 15:54:09 +0800 CST2013-08-15 15:54:09 +0800 CST 2013-08-15 15:54:09 +0800 CST

强制通过网段捕获本地 TCP 数据包

  • 772

我有两台机器,A 和 B,运行 RHEL Linux。每台机器都有一个连接到我称之为“LAN”网络的 1Gig 网卡。每台机器都有一个 10Gig 网卡,连接到我称之为“BIGDATA”的网络。除了通过这些机器外,这些网络没有相互连接。

我在 BIGDATA 网络上的 A 的 10Gig 接口上有光纤分接头。水龙头通向捕获服务器,我想在其中记录所有进出的数据。最初都是 TCP,但将来也许一些 UDP 会很好。

出于开发和测试目的,我想在 A 上运行 TCP 对话的双方,然后通过这些水龙头捕获对话。将使用此设置的开发人员不会在 B 上拥有帐户(至少这是我的目标)。

在我看来,超级用户应该可以在 B 上设置某种转发/中继,这将允许 A 上的客户端通过分接光纤连接到 A 上的服务器。即流量从 LAN 网络上的 A 到 B,然后在 BIGDATA 网络上返回到 A。返回流量采用相同的路径返回。

到目前为止,我的尝试是使用 ssh 隧道。喜欢A:~ $ssh B -L 8051:<A's-BIGDATA-IP>:3434 -N。这实际上非常适合捕获从客户端到服务器的流量。但不幸的是,服务器的响应是找到只留在本地的捷径,并且永远不会出现在光纤上。查看wireshark,数据包知道它们的目标IP,并且不觉得有义务收回隧道。

我找到了这个答案,但我相信所有的解决方案都要求两个接口都在同一个网络上。也许我的解决方案的种子在那里,但我找不到它们。

我想我可以用 C 从头开始​​编写这个程序,在 B 上运行一个程序,在 LAN 接口上建立 TCP 连接,在 BIGDATA 接口上启动另一个 TCP 连接,返回到 A,并转发回复。它只会复制 TCP 有效负载,这足以满足我的目的。

是否有一个很酷的工具可以进行这种转发/中继?

有没有办法让 ssh 隧道按照我想要的返回流量的方式工作?

linux
  • 3 3 个回答
  • 929 Views

3 个回答

  • Voted
  1. Andrew
    2013-08-15T18:59:01+08:002013-08-15T18:59:01+08:00

    看看EtherPuppet ,可能与Scapy结合使用;EtherPuppet 被描述为

    一个用于 Linux 的小程序,它将为以太网接口创建一个巫毒娃娃。

    ...

    真实界面看到的一切都会被虚拟界面看到。发送到虚拟接口的所有内容都将由真实接口发出。

    Scapy被描述为

    一个强大的交互式数据包处理程序。它能够伪造或解码大量协议的数据包,通过网络发送它们,捕获它们,匹配请求和回复等等。

    • 1
  2. Best Answer
    Matt
    2013-08-20T02:15:24+08:002013-08-20T02:15:24+08:00

    源和目标 NAT

    只要您不介意破坏您正在捕获的数据包,您就可以使用与您找到的答案相同的想法,使用 DNAT 和 SNAT 的组合来转发流量。捕获将具有 B 的目标 IP 或 src IP,但听起来您已经使用转发客户端完成了该操作。我猜 NAT 的优势在于速度,一切都保留在内核空间中。

    此示例是 A 上的客户端连接到 A:BIGDATA:3434 上的服务器。NAT 规则将连接从 A 转发到 B,然后 B 转发回 A,同时将源设置为 B 以设置返回路径。如果您不熟悉 NAT 表,请查看netfilter 指南。

    • 确保在 B 上启用了 IP 转发:

      sysctl -w net.ipv4.ip_forward=1
      echo 1 > /proc/sys/net/ipv4/ip_forward
      
    • 流量在 LAN 网络上从 A 流向 B

      # On A, forward local traffic for local service out LAN to B.
      iptables -t nat -A OUTPUT -p tcp -d A:BIGDATA --dport 3434 -j DNAT --to-destination B:LAN
      
    • 然后回到 BIGDATA 网络上的 A。

      # On B, forward the traffic to back to A over fibre
      iptables -t nat -A PREROUTING -p tcp -d B:LAN --dport 3434 -j DNAT --to-destination A:BIGDATA
      
    • 返回流量采用相同的路径返回

      # On B, set the source address for this traffic to B fibre
      iptables -t nat -A POSTROUTING -d A:BIGDATA -p tcp --dport 3434 -j SNAT --to-source B:BIGDATA
      

    NAT 连接跟踪负责最后映射回原始源 IP。

    • 1
  3. RaveTheTadpole
    2013-08-19T09:03:17+08:002013-08-19T09:03:17+08:00

    虽然这不是我希望找到的答案,但我最终还是自己动手了。

    我编写了一个在 B 上运行的程序,该程序将接受 LAN 接口上的连接并启动 BIGDATA 接口的连接。该程序将 TCP 有效负载复制到新的传出消息中。它对以另一种方式返回的回复做同样的事情。这不会保留标头信息(例如源 IP)——在我的情况下,我认为这是一件好事,因此返回流量不会捷径。

    它正在工作,尽管对于我认为如此基本的东西来说这是一种痛苦。我会发布源代码,但它很冗长,可能写得不太好。

    我将不接受答案,希望有人最终会以完美的解决方案偶然发现它!

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve