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

写了个实现各种操作系统互联网检测 API 的服务器

  •  
  •   zhjits · 2021-02-22 21:43:46 +08:00 · 2274 次点击
    这是一个创建于 460 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情起因是我的 Windows 10 右下角网络状态( NCSI )总是未连接到互联网,这就导致微软商店和 Xbox Game Pass 游戏都经常打不开,而且连了有线网也不一定会自动切换到有线网,可能还是用的 WiFi 。于是最近一怒之下在自家局域网部署了一个假的联网状态检测 API,把请求都劫持了过去,结果效果惊人的好,上述问题都没有了,WiFi 点击连接到连上的时间也快了好多。

    顺手把 Android 上著名的 /generate_204,以及水果和常见 Linux 发行版的检测 URL 也实现了一下,放 GitHub 上开源了。

    https://github.com/Jamesits/alwaysonline
    7 条回复    2021-02-23 20:11:39 +08:00
    CallMeReznov
        1
    CallMeReznov  
       2021-02-22 22:23:36 +08:00   ❤️ 2
    竟然我解决不了问题,那我就解决提出问题的人!
    mmtromsb456
        2
    mmtromsb456  
       2021-02-23 09:16:46 +08:00 via iPhone   ❤️ 2
    文档写得真不错
    missdeer
        3
    missdeer  
       2021-02-23 10:11:26 +08:00
    80 和 53 已经被占了就不能用了?
    ysc3839
        4
    ysc3839  
       2021-02-23 11:38:11 +08:00 via Android   ❤️ 1
    我学校的网晚上会“断网”,但实际上不是真的断,只是封了 IPv4 的 80 和 443 端口,走别的端口还是能用。但是这会导致各类操作系统认为无法连接互联网。
    我的解决方案是在路由器上写个 shell 脚本,通过 CGI 来返回对应的信息,并修改路由器的 hosts 实现域名劫持。
    另外新版本的 Android 没法直接使用这种方案,因为它会先发一个 https 请求,如果成功则认为有网,失败后才会发一个 http 请求,但是 http 仅用于检测是否需要显示登录页面,无论是否成功都会认为没有网。
    zoikhemlab
        5
    zoikhemlab  
       2021-02-23 17:38:27 +08:00   ❤️ 1
    文档写得真不错
    zhjits
        6
    zhjits  
    OP
       2021-02-23 20:11:11 +08:00
    @missdeer 这玩意原理上就必须跑在 80 端口上……不然怎么接收标准端口的 HTTP 请求呢。反正 Linux 上就算端口被占用了,开个新的 netns 加上一对 veth 也就行了。
    zhjits
        7
    zhjits  
    OP
       2021-02-23 20:11:39 +08:00
    @ysc3839 嗯……Android 是比较麻烦,它上了 HTTPS 就不好自动化劫持了。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2676 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 08:11 · PVG 16:11 · LAX 01:11 · JFK 04:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.