大家都是用什么方法.
程序是python写的.
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
用socket连下大网站的80端口不就行了。
1、 ping 的话可能会并网关屏蔽掉,比如我们这里2、80 端口,有些需要认证的网络,比如 ChinaUnicom的 wifi,登录之前会把所有的 80 端口DNAT然后重定向到登录页面,导致误判。3、 443 端口,一般认证的网络不会对这个端口 DNAT,即使做了,也会导致证书错误,国内 HTTPS 网站不多,而且百度正常情况下也会有 证书错误。
ping
80
ChinaUnicom
DNAT
443
HTTPS
所以建议 wget/curl 某个有固定内容的 HTTP 页面,比如 http://example.com/(这个域名真的存在),然后判断其中的内容,如果检测到不同还可以提示用户"您所在的网络可能需要登录才能使用"。而且即使判断错了也与用户的体验一样。
wget/curl
HTTP
http://example.com/
ping www.baidu.com
如何检测他是否连接到外网,这个问题本身很难解决,因为你无法定义“连接到外网”。所以只有针对性的做法:
这是任天堂3DS的做法:get 这个域名conntest.nintendowifi.net。如果打得开,返回This is test.html page,那么3DS就认为自己联网的。整个流程包括了域名解析和http 80请求。
至于不同的环境都有不同。比如哪天万一conntest.nintendowifi.net被墙了,被禁了,这个方法就不生效。某些网络禁ping,ping方法也不生效。
直接执行命令 ping 或者其他?
ping 命令
例ping www.sina.com,查看丢包率。
wget个文件,检查大小
著名的 curl ifconfig.me
curl ifconfig.me
就像浏览器上网一样,我们获取百度的首页的页面看看,有没有html字样,百度字样:
wget http://www.baidu.com/
会获取一个index的html。有成功,没有就没网。哈哈
用socket连下大网站的80端口不就行了。
1、
ping
的话可能会并网关屏蔽掉,比如我们这里2、
80
端口,有些需要认证的网络,比如ChinaUnicom
的 wifi,登录之前会把所有的 80 端口DNAT
然后重定向到登录页面,导致误判。3、
443
端口,一般认证的网络不会对这个端口DNAT
,即使做了,也会导致证书错误,国内HTTPS
网站不多,而且百度正常情况下也会有 证书错误。所以建议
wget/curl
某个有固定内容的HTTP
页面,比如http://example.com/
(这个域名真的存在),然后判断其中的内容,如果检测到不同还可以提示用户"您所在的网络可能需要登录才能使用"。而且即使判断错了也与用户的体验一样。ping www.baidu.com
如何检测他是否连接到外网,这个问题本身很难解决,因为你无法定义“连接到外网”。
所以只有针对性的做法:
这是任天堂3DS的做法:
get 这个域名conntest.nintendowifi.net。如果打得开,返回This is test.html page,那么3DS就认为自己联网的。
整个流程包括了域名解析和http 80请求。
至于不同的环境都有不同。比如哪天万一conntest.nintendowifi.net被墙了,被禁了,这个方法就不生效。
某些网络禁ping,ping方法也不生效。
直接执行命令 ping 或者其他?
ping 命令
例ping www.sina.com,查看丢包率。
wget个文件,检查大小
著名的
curl ifconfig.me
就像浏览器上网一样,我们获取百度的首页的页面看看,有没有html字样,百度字样:
会获取一个index的html。有成功,没有就没网。哈哈