V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
learningman
V2EX  ›  程序员

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

  •  
  •   learningman ·
    Zxilly · 2020-11-15 11:27:25 +08:00 · 2199 次点击
    这是一个创建于 1505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想要实现一个 tcp 透明代理,并将其中所有的 http 请求重定向到另外一个端口

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

    完整的说明在: https://v2ex.com/t/724819#reply0
    第 1 条附言  ·  2020-11-30 13:21:51 +08:00

    自己写了一个,用的NFQUEUE tartget

    如果也有人在纠结这个问题,不妨看看

    https://github.com/Zxilly/UA2F

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

    无非就是想绕过校园网限制,何必纠结在 UA 上面呢,买个带公网的 VPS,把所有流量包装成 HTTP 协议内容穿出去就是,说不定简单的 CONNECT 式的代理就能绕过了。
    zhangsanfeng2012
        8
    zhangsanfeng2012  
       2020-11-15 14:06:05 +08:00 via Android
    路由器起 http 代理服务器,代理服务器改 ua 不就行了
    learningman
        9
    learningman  
    OP
       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
        10
    Jirajine  
       2020-11-15 22:56:09 +08:00 via Android
    @learningman 它只能处理 http/https,其他的流量当然是原样转发。
    LGA1150
        11
    LGA1150  
       2020-11-16 14:21:23 +08:00   ❤️ 1
    @learningman #9
    nginx 前面再套个 sslh
    learningman
        12
    learningman  
    OP
       2020-11-18 13:17:29 +08:00
    @LGA1150 好东西,要的就是这个,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2838 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.