如何实现识别 tcp 中的包含 http 的包 (期望使用 iptables)

2020-11-15 11:27:25 +08:00
 learningman
想要实现一个 tcp 透明代理,并将其中所有的 http 请求重定向到另外一个端口

为了避免 XYZ 问题,我说一下本来的需求:修改所有流经网关的 HTTP 流量中的 User-Agent

完整的说明在: https://v2ex.com/t/724819#reply0
2117 次点击
所在节点    程序员
12 条回复
xchaoinfo
2020-11-15 11:59:55 +08:00
试试 mitmproxy 能否解决楼主的需求
0TSH60F7J2rVkg8t
2020-11-15 12:16:47 +08:00
如果是代理的话,改头就行了,但是那你得用技术(转发? dns ?),要把访问目的地设定在你的代理 ip 上。但遇到 https,你就没法看到 http 头了。直接修改 tcp 包,一样有 https 的问题,而且即使是 http,你改了 header 还得重新计算 tcp 的 checksum: http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm
learningman
2020-11-15 12:19:47 +08:00
@ahhui https 不需要改,这里指的是狭义的 http
检测到是 http 我就 redirect 到 nginx 去,应该就不用手动处理了吧
xuanbg
2020-11-15 12:49:38 +08:00
Nginx 就可以实现了吧
Jirajine
2020-11-15 12:55:50 +08:00
mitmproxy 已经支持透明模式,直接用就行了。
DoctorCat
2020-11-15 13:29:20 +08:00
位于 7 层代理服务端更改 ua 就行了。印象中 iptalbes 默认不支持对应用层的包做任何更改
muzuiget
2020-11-15 13:47:28 +08:00
这样还得先判断每个 TCP 链接是否 HTTP 链接,还要拆包,重新打包,兼容各种情况,麻烦得很。

无非就是想绕过校园网限制,何必纠结在 UA 上面呢,买个带公网的 VPS,把所有流量包装成 HTTP 协议内容穿出去就是,说不定简单的 CONNECT 式的代理就能绕过了。
zhangsanfeng2012
2020-11-15 14:06:05 +08:00
路由器起 http 代理服务器,代理服务器改 ua 不就行了
learningman
2020-11-15 22:51:16 +08:00
@xuanbg
@zhangsanfeng2012 已经用 nginx 改了,现在的问题是有的 http 请求不使用 80 端口,比如说 QQ 就用 8080 端口,但是如果用 iptables 直接转发 8080 的话,会有一些非 http 的 tcp 包也被转发到 nginx,这个 nginx 处理不了

@muzuiget 国内的公网带宽价格离谱,国外的连接速度离谱


@Jirajine 它能够做到非 http 的 tcp 直接放行吗?我看他也是一个 http 代理服务器
Jirajine
2020-11-15 22:56:09 +08:00
@learningman 它只能处理 http/https,其他的流量当然是原样转发。
LGA1150
2020-11-16 14:21:23 +08:00
@learningman #9
nginx 前面再套个 sslh
learningman
2020-11-18 13:17:29 +08:00
@LGA1150 好东西,要的就是这个,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725399

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX