“编辑”来自 TCP 主机的流量的简单方法(Linux)

“编辑”来自 TCP 主机的流量的简单方法(Linux)

在处理连接的进程获取流之前,我需要对来自已知 TCP 主机:端口的传入流量做一些小的修改。

例如,假设 192.168.1.88 是运行 Web 服务器的远程主机。
我需要,当我本地主机上的进程从 192.168.1.88:80(例如浏览器)接收数据时,首先将数据更改为text-Atext-B如下所示:

  • 127.0.0.1:... 连接到 192.168.1.88:80
  • 127.0.0.1:...发送至 192.168.1.88:80:

    GET /
    
  • 192.168.1.88:80 发送至 127.0.0.1:...:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-A, some other text
    
  • 该数据在某种程度上被系统截取并传递给程序,其输出为:

    HTTP/1.0 200 OK
    Content-Type: text/plain
    
    Some text-B, some other text
    
  • 系统将改变后的数据提供给处理 127.0.0.1:... 的进程,就好像它来自 192.168.1.88:80。

假设我有一种基于流的方法来做出这种改变(sed例如使用),那么预处理传入的 tcp 流的最简单方法是什么?

我猜这会涉及到iptables,但我不太擅长。

请注意,应用程序应该处理原始主机,因此设置代理可能不是一个解决方案。

答案1

使用 netsed 和 iptables 代理。

iptables -t nat -D PREROUTING -s yourhost -d desthost -p tcp --dport 80 -j REDIRECT --to 10101

然后运行:

netsed tcp 10101 desthost 80 s/text-A/text-B

网络SED是一款小巧方便的实用程序,旨在实时更改通过网络转发的数据包内容。它对于网络数据包更改、伪造或操纵非常有用。NetSED 支持:

  • 黑盒协议审计 - 每当有两个或多个专有盒子使用某些未记录的协议进行通信时。通过强制更改正在进行的传输,您将能够测试所检查的应用程序是否可以声称是安全的。

  • 模糊生成实验、完整性测试——每当您对应用程序进行稳定性测试时,都要查看它如何关心数据完整性;

  • 其他常见用例:欺骗性传输、内容过滤、协议转换——任何最适合您手头任务的。

答案2

你可以使用 iptables 来实现这一点通过 squid 代理透明地代理连接,然后有squid 重写 http 内容为你。

答案3

iptables+ 使用libnetfilter_qu是另一个可以实现您想要的功能的选项:

“...[重新注入]改变的数据包到内核 nfnetlink_queue 子系统。”

它可能会为您提供最大的可扩展性,因为软件编码取决于您。

一个 Python 包装器也可用。

相关内容