网络 - 一台linux的机器, 如何简单的检测他是否能连接到外网?
高洛峰
高洛峰 2017-04-17 13:34:43
0
14
1087

大家都是用什么方法.

程序是python写的.

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(14)
洪涛

用socket連下大網站的80埠不就行了。

迷茫

1、 ping 的話可能會併網關屏蔽掉,比如我們這裡
2、80 端口,有些需要認證的網絡,比如ChinaUnicom的wifi,登錄之前會把所有的80 端口DNAT然後重定向到登入頁面,導致誤判。
3、 443 端口,一般認證的網絡不會對這個端口DNAT,即使做了,也會導致證書錯誤,國內HTTPS 網站不多,而且百度正常情況下也會有證書錯誤。

所以建議wget/curl 某個有固定內容的HTTP 頁面,例如http://example.com/(這個網域真的存在),然後判斷其中的內容,如果偵測到不同還可以提示使用者"您所在的網絡可能需要登入才能使用"。而且即使判斷錯了也與使用者的體驗一樣。

阿神

ping www.baidu.com

Peter_Zhu

如何偵測他是否連接到外網,這個問題本身很難解決,因為你無法定義「連接到外網」。
所以只有針對性的做法:

這是任天堂3DS的做法:
get 這個網域conntest.nintendowifi.net。如果打得開,回傳This is test.html page,那麼3DS就認為自己連網的。
整個流程包括了網域解析和http 80請求。

至於不同的環境有不同。例如哪天萬一conntest.nintendowifi.net被牆了,被禁了,這個方法就不生效。
某些網路禁ping,ping方法也不生效。

迷茫

直接執行指令 ping 或其他?

PHPzhong

ping 指令

迷茫

例ping www.sina.com,查看丟包率。

Ty80

wget個文件,檢查大小

迷茫

著名的 curl ifconfig.me

Peter_Zhu

就像瀏覽器上網一樣,我們取得百度的首頁的頁面看看,有沒有html字樣,百度字樣:

wget http://www.baidu.com/

會取得一個index的html。有成功,沒有就沒網。哈哈

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!