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


9

在处理连接的进程获取流之前,我需要对来自已知tcp host:port的传入流量进行一些小的修改。

例如,让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,但我不是很擅长。

请注意,该应用程序应具有处理原始主机的感觉,因此设置代理不太可能是一种解决方案。


这些是HTTP请求吗?
多项式

您的问题还不够清楚。您需要提供更多详细信息。
哈立德

1
您不能在数据包级别执行此操作。一个数据包可能包含“文本-”,而另一个数据包可能包含“ A”。您将必须开发遵循该协议的隐形代理。(您必须遵循该协议,因为如果您获得“文本-”并且它是“文本-A”的一部分,则需要等待下一个块传递给它,否则您的过滤器将无法工作。但是如果结束逻辑消息,您不能等待,因为您将永远等待。)我相信没有简单的方法可以做到这一点。
大卫·史瓦兹

已经存在有状态的数据包检查系统,该系统可以执行例如FTP流量重写,以使其跨NAT工作。那是开始的地方。
pjc50 2011年

我主要需要它与http响应一起使用,但是如果它可以在任何应用程序层上工作都很好。
etuardu 2011年

Answers:


21

使用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

NetSED是一个小型便捷工具,旨在实时更改通过网络转发的数据包的内容。对于网络数据包更改,伪造或篡改,它确实很有用。NetSED支持:

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

  • 模糊测试,完整性测试-每当您对应用程序进行稳定性测试以查看其如何维护数据完整性时;

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


那真的很简单很酷。
mbrownnyc

我不知道netsed,它几乎完全适合我的目的。我唯一不了解的是如何设置“本地透明代理”(请参阅​​问题)。也许我应该设置另一个(虚拟)网络接口来获得该接口。顺便说一下,目前这是最令人满意的答案。
etuardu 2011年

您是否正在运行通用分发内核?如果您是iptables的支持者,可能已经在其中进行了编译。为了设置透明代理,您只需要为主机/端口填写适当的详细信息即可。看一下自述文件,看看它是否填写了一些细节。 silicone.homelinux.org/git/netsed.git/blob_plain/HEAD:/README
DFC

我以为netsed一次只能处理一个数据包?因此,如果将http请求拆分为两个数据包,则替换用的正则表达式将不匹配,并且该请求将未经修改地传递到服务器。
paulos,2011年

1
好吧,以防万一有人需要这一天:不是我完全理解它,而是为了实际修改传出数据包(这是op不想做的事情),您必须修改OUTPUT,而不是PREROUTING。同样,-D选择必须-A 适合我。另外,对于该-j选项,我必须使用DNAT --to-destination (ip)REDIRECT --to-port。最后,我无法修复netsed的细分错误。另请参见:ubuntuforums.org/showthread.php?t=2337389
phil294


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.