一台linux的机器, 如何简单的检测他是否能连接到外网?


大家都是用什么方法.

程序是python写的.

Linux 网络

ljj3388 9 years, 3 months ago

如何检测他是否连接到外网,这个问题本身很难解决,因为你无法定义“连接到外网”。
所以只有针对性的做法:

这是任天堂3DS的做法:
get 这个域名conntest.nintendowifi.net。如果打得开,返回This is test.html page,那么3DS就认为自己联网的。
整个流程包括了域名解析和http 80请求。

至于不同的环境都有不同。比如哪天万一conntest.nintendowifi.net被墙了,被禁了,这个方法就不生效。
某些网络禁ping,ping方法也不生效。

X-412 answered 9 years, 3 months ago

我是文文使 answered 9 years, 3 months ago

为什么不ping 网易,网易生气了

披着狼皮的羊驼 answered 9 years, 3 months ago

北北东22 answered 9 years, 3 months ago

PING是使用ICMP协议,有许多主机会直接将ICMP包给直接丢掉。

看了大家回答比较多用wget或者curl,这两者是基于HTTP协议,当然也可以正常使用。
另外我也提供一个比较常用的工具,用telnet.如telnet www.baidu.com 80

索尼爱立信 answered 9 years, 3 months ago

去ping一个常用的网站,比如: ping www.baidu.com

路人甲西奈 answered 9 years, 3 months ago

就像浏览器上网一样,我们获取百度的首页的页面看看,有没有html字样,百度字样:


 wget http://www.baidu.com/

会获取一个index的html。有成功,没有就没网。哈哈

唬人无极限 answered 9 years, 3 months ago

著名的 curl ifconfig.me

是薯还是穷奇喵 answered 9 years, 3 months ago

wget个文件,检查大小

jpg改rar answered 9 years, 3 months ago

season answered 9 years, 3 months ago

ping 命令

minimiz answered 9 years, 3 months ago

直接执行命令 ping 或者其他?

AY-渣B answered 9 years, 3 months ago

1、 ping 的话可能会并网关屏蔽掉,比如我们这里
2、 80 端口,有些需要认证的网络,比如 ChinaUnicom 的 wifi,登录之前会把所有的 80 端口 DNAT 然后重定向到登录页面,导致误判。
3、 443 端口,一般认证的网络不会对这个端口 DNAT ,即使做了,也会导致证书错误,国内 HTTPS 网站不多,而且百度正常情况下也会有 证书错误。

所以建议 wget/curl 某个有固定内容的 HTTP 页面,比如 http://example.com/ (这个域名真的存在),然后判断其中的内容,如果检测到不同还可以提示用户"您所在的网络可能需要登录才能使用"。而且即使判断错了也与用户的体验一样。

奥特曼在上海 answered 9 years, 3 months ago

Your Answer