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

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

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

https://github.com/Jamesits/alwaysonline
2993 次点击
所在节点    分享创造
7 条回复
CallMeReznov
2021-02-22 22:23:36 +08:00
竟然我解决不了问题,那我就解决提出问题的人!
mmtromsb456
2021-02-23 09:16:46 +08:00
文档写得真不错
missdeer
2021-02-23 10:11:26 +08:00
80 和 53 已经被占了就不能用了?
ysc3839
2021-02-23 11:38:11 +08:00
我学校的网晚上会“断网”,但实际上不是真的断,只是封了 IPv4 的 80 和 443 端口,走别的端口还是能用。但是这会导致各类操作系统认为无法连接互联网。
我的解决方案是在路由器上写个 shell 脚本,通过 CGI 来返回对应的信息,并修改路由器的 hosts 实现域名劫持。
另外新版本的 Android 没法直接使用这种方案,因为它会先发一个 https 请求,如果成功则认为有网,失败后才会发一个 http 请求,但是 http 仅用于检测是否需要显示登录页面,无论是否成功都会认为没有网。
zoikhemlab
2021-02-23 17:38:27 +08:00
文档写得真不错
zhjits
2021-02-23 20:11:11 +08:00
@missdeer 这玩意原理上就必须跑在 80 端口上……不然怎么接收标准端口的 HTTP 请求呢。反正 Linux 上就算端口被占用了,开个新的 netns 加上一对 veth 也就行了。
zhjits
2021-02-23 20:11:39 +08:00
@ysc3839 嗯……Android 是比较麻烦,它上了 HTTPS 就不好自动化劫持了。

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

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

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

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

© 2021 V2EX