84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
大家都是用什么方法.
程序是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。有成功,沒有就沒網。哈哈