检查是否连接到互联网?求一个优雅的思路

2020-03-28 02:00:59 +08:00
 black11black
如题,业务需要程序自检是否能连接到互联网,如果断网需要立即做出反应,要求是反应足够快。

一个简单的想法是每秒访问指定网站,来检测连通性,这样可以规避一些“假连通”的情况,但是稳定提供服务的网站很难找。比如请求百度的话,其实历史上百度也是挂过的,还不止挂过一次。。。

服务器在国内
25839 次点击
所在节点    Linux
41 条回复
wwwjfy
2020-03-28 02:04:02 +08:00
每次找多个大的网站就行,同时挂的机率可以忽略,除非大灾害
imdong
2020-03-28 02:09:51 +08:00
那还有地区性网络故障?
获取本地运营商 DNS,然后 ping ?
wd
2020-03-28 02:31:35 +08:00
你是的历史上百度挂掉是什么时候?
ysc3839
2020-03-28 03:15:56 +08:00
Windows 是通过请求 http://www.msftconnecttest.com/connecttest.txt ,然后判断返回的内容来判断是否联网的。
Android 是先请求 https://www.google.com/generate_204 如果返回的状态码不是 204,则请求 http://connectivitycheck.gstatic.com/generate_204 来检测是否需要登录。
wwbfred
2020-03-28 03:38:09 +08:00
就用楼上那个微软的就很好,那个就是 windows 用的判断方法.
不行就多找几个,谷歌微软苹果百度一起上,通一个就是通了.
seki
2020-03-28 03:43:39 +08:00
只要这个大型网站 SLA 比你的目标高若干个等级就好了,而且一年个位数假警报,应该也算可以接受吧

比较好用的也许是 204
iamwho
2020-03-28 05:20:17 +08:00
NTP Server
AoTmmy
2020-03-28 05:58:37 +08:00
alphatoad
2020-03-28 07:29:35 +08:00
captive.apple.com
全球都可访问(包括中国
input2output
2020-03-28 08:04:17 +08:00
内地可以 ping 1.2.4.8
AllenHua
2020-03-28 08:47:10 +08:00
多来几个服务器 有一个能连通就算已连接到互联网
reus
2020-03-28 09:12:36 +08:00
先连腾讯,失败再连淘宝,失败再连百度,三家都出问题的概率应该极低。重点是失败了再测试下一个,这样大部分时间的开销和只连一个是一样的,也就是一家响应就是联网了,三家都不响应才是断网。
aguesuka
2020-03-28 09:17:14 +08:00
1.1.1.1
jinliming2
2020-03-28 09:28:29 +08:00
ujued
2020-03-28 09:35:27 +08:00
一直 ping 8.8.8.8,一段时间内,安丢包率判断网络状态。

运维给出的意见,仅供参考。
Les1ie
2020-03-28 09:44:24 +08:00
http://detectportal.firefox.com/success.txt

注意:
这个网址支持 ipv6,当设备只能访问 ipv6 不能访问 ipv4 的时候,依然会返回 success
BFDZ
2020-03-28 10:03:02 +08:00
pool.ntp.org
今天活跃的服务器有 4228 台
barrelsoil
2020-03-28 12:04:26 +08:00
概率论学好,百度历史上挂过,概率多少?

2 个类似百度的大网站呢?概率一乘又是多少
diggerdu
2020-03-28 12:26:42 +08:00
m30102
2020-03-28 12:31:34 +08:00
访问 百度 腾讯 新浪 服务器,3 个都挂那么则不能联网

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

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

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

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

© 2021 V2EX