【发布时间】:2011-02-03 13:44:56
【问题描述】:
我有一个简单的问题,我相信这里有人曾经做过......
我想重写第 4 层 TCP/IP 流(不是较低层的单个数据包或帧。)Ettercap 的etterfilter 命令允许您基于固定字符串或正则表达式执行第 4 层 TCP/IP 流的简单实时替换。示例 Ettercap 脚本代码:
if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "gzip")) {
replace("gzip", " ");
msg("whited out gzip\n");
}
}
if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "deflate")) {
replace("deflate", " ");
msg("whited out deflate\n");
}
}
http://ettercap.sourceforge.net/forum/viewtopic.php?t=2833
我想根据我自己的过滤程序重写流,而不仅仅是简单的字符串替换。任何人都知道如何做到这一点?除了 Ettercap 之外,还有什么东西可以像这样进行实时替换,比如作为 VPN 软件的插件之类的?
我希望在两个以太网接口之间有一个类似于 ettercap 的 silent bridged sniffing 配置的配置。通过这种方式,我可以静默过滤来自任一方向的流量,而不会出现 NAT 问题。请注意,我的过滤器是一个充当管道过滤器的应用程序,类似于 unix 命令行过滤器的设计:
>[eth0] <----------> [my filter] <----------> [eth1]<
我的过滤器将是一个用户空间 Python 函数。
我已经知道但不适合的:
Tun/Tap - 在较低的数据包层工作,我需要使用较高层的流。
Ettercap - 除了上面示例中的受限功能之外,我找不到任何替代方法。
挂钩到某些 VPN 软件? - 我只是不知道是哪一个或确切的方式。
libnetfilter_queue - 适用于较低层的数据包,而不是 TCP/IP 流。
同样,重写应该发生在传输层(第 4 层),就像在本示例中所做的那样,而不是基于较低层数据包的方法。准确的代码将大有帮助!
谢谢!
【问题讨论】:
-
关于您的代码的问题 - replace("gzip", " "); 行是否引用 DATA.data 对象?从代码中并没有明显看出它提到了在哪里搜索字符串。
-
这个例子是用 ettercap 的自定义“etterfilter”脚本语言编写的。是的,
replace函数似乎在操纵Data.data变量。
标签: python c security network-programming sockets