V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
iqoo
V2EX  ›  分享创造

JS 检测用户是否使用 socks5 代理

  •  2
     
  •   iqoo · 2021-10-17 17:26:21 +08:00 · 2682 次点击
    这是一个创建于 1138 天前的主题,其中的信息可能已经有所发展或是发生改变。

    检测方案有很多,这里讲解一个有趣的。

    由于大部分 socks5 代理只转发数据,不转发 TCP 头,因此后端返回数据时附带一个特殊的 TCP 头,然后前端验证该头是否生效,即可推断否是存在代理。

    例如后端下发 tcpwin=0 的控制信息,正常情况下前端收到后不会再往外发包,数据累计在协议栈缓冲区里;而有代理的情况下,数据被累积在了代理服务的缓冲区,前端仍能往代理服务发包,缓冲区不会有累积。至于缓冲区是否满,可通过 WebSocket 的 bufferAmount 属性检测。

    Demo: www.etherdream.com/proxy-detect/tcpwin.html

    实现也很简单,查看 github.com/EtherDream/web-frontend-magic

    有不准确的情况可反馈。

    21 条回复    2023-10-12 14:13:35 +08:00
    Trim21
        1
    Trim21  
       2021-10-17 17:31:43 +08:00 via Android
    手机试了下,挂没挂代理都是 true
    XhstormR02
        2
    XhstormR02  
       2021-10-17 18:26:15 +08:00 via Android
    Android vpn 试了有效
    ZeroClover
        3
    ZeroClover  
       2021-10-17 18:39:34 +08:00
    对移动设备似乎无效。

    虚拟网卡类型的代理似乎也能检测出来。
    liuzhiyong
        4
    liuzhiyong  
       2021-10-17 18:49:09 +08:00 via Android
    安卓上面有效,强。
    ClarkAbe
        5
    ClarkAbe  
       2021-10-17 19:40:48 +08:00
    大佬本人?
    iqoo
        6
    iqoo  
    OP
       2021-10-17 19:44:05 +08:00
    理论上 VPN 是无效的,只有 http/socks 有效
    Tink
        7
    Tink  
       2021-10-17 20:06:40 +08:00 via Android
    厉害了,路由器 clash fq 有效
    crab
        8
    crab  
       2021-10-17 20:17:37 +08:00
    @ClarkAbe 记得是他 @mytry
    heiher
        9
    heiher  
       2021-10-17 21:18:44 +08:00
    有两个问题:
    1. tcpwin=0 时,用户态 send 的数据也可以在内核的 TCP 栈上部分缓冲,缓冲空间有多大不同系统可能不同,影响判断精度不?
    2. socks5 代理服务器也可以缓冲很小的,与问题 1 还是不太好区分?
    lekai63
        10
    lekai63  
       2021-10-17 21:58:51 +08:00 via iPhone
    loon 测了下。 被识别出来了
    iqoo
        11
    iqoo  
    OP
       2021-10-17 22:52:05 +08:00
    @heiher 不止 TCP 栈有缓冲,浏览器 ws 栈也有,所有得发很大的数据,把本地缓冲用完(反正发多大数据都不会消耗服务器带宽)。

    代理缓冲小就没办法了,会有误报。
    NewYear
        12
    NewYear  
       2021-10-18 09:15:10 +08:00
    win10 firefox 无效
    iqoo
        13
    iqoo  
    OP
       2021-10-18 10:39:06 +08:00
    @NewYear firefox 缓冲区比较小,得减少发送量。现在可以了
    iqoo
        14
    iqoo  
    OP
       2021-10-18 11:19:21 +08:00
    @NewYear 应该是和代理端的缓冲区有关,不同的软件不一样。所以这种方式其实并不稳定~
    scyuns
        15
    scyuns  
       2021-10-18 13:46:17 +08:00
    4G 开流量看也是 true 呀
    NewYear
        16
    NewYear  
       2021-10-18 17:58:10 +08:00
    @iqoo 没啥用,还是 false 。。。。算了吧别折腾了哈哈哈
    BQsummer
        17
    BQsummer  
       2021-10-20 16:22:53 +08:00
    mac big sur, clash, ss, chrome 无效
    imxieke
        18
    imxieke  
       2021-10-23 05:13:35 +08:00 via iPhone
    ios 15 无效 结果都一样
    imxieke
        19
    imxieke  
       2021-10-23 05:14:08 +08:00 via iPhone
    shadowrocket
    hanssx
        20
    hanssx  
       2023-10-12 14:07:02 +08:00
    这个需要等好久吗?一直显示 status: ...
    也没发现有未完成的包?
    hanssx
        21
    hanssx  
       2023-10-12 14:13:35 +08:00
    看到了,ws server 关了应该是
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:14 · PVG 05:14 · LAX 13:14 · JFK 16:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.