在处理连接的进程获取stream之前,我需要对来自已知tcp主机:端口的传入stream量进行一些小的修改。
例如,让192.168.1.88是运行Web服务器的远程主机。
我需要的是,当我的本地主机上的进程接收到来自192.168.1.88:80(例如浏览器)的数据时,数据首先被replace为text-B
text-A
,如下所示:
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。
假设我有一个基于stream的方式来进行更改(例如使用sed
),预处理传入的tcpstream最简单的方法是什么?
我想这会涉及iptables
,但我不是很擅长。
请注意,应用程序应该觉得要处理原来的主机,所以设置代理不可能是一个解决scheme。
使用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是一个小巧而实用的实用程序,旨在实时更改通过networking转发的数据包内容。 这对于networking数据包的变更,锻造或者操作是非常有用的。 NetSED支持:
黑匣子协议审计 – 每当有两个或更多专有的箱子使用某些未公开的协议进行通信时。 通过执行正在进行的传输更改,您将能够testing被检查的应用程序是否可以声称是安全的。
模糊生成实验,完整性testing – 只要您对应用程序进行稳定性testing,看看它是如何关心数据完整性的;
其他常见用例:欺骗性转移,内容过滤,协议转换 – 最适合您的任务。
你可以通过使用iptables 透明地代理squid代理连接 ,然后让squid为你重写http内容来做到这一点。
iptables
+ libnetfilter_qu的使用是另一个select,将做你想做的事情:
“… [重新发送]更改的数据包到内核nfnetlink_queue子系统。”
它可能会给你最大的可扩展性,因为它是由你来编写软件。
还有一个python包装可用。