首頁  >  問答  >  主體

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

大家都是用什么方法.

程序是python写的.

高洛峰高洛峰2744 天前1090

全部回覆(14)我來回復

  • PHP中文网

    PHP中文网2017-04-17 13:36:43

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:36:43

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

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

    回覆
    0
  • 阿神

    阿神2017-04-17 13:36:43

    ping www.baidu.com

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:36:43

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

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:36:43

    直接執行指令 ping 或其他?

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:36:43

    ping 指令

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:36:43

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:36:43

    wget個文件,檢查大小

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:36:43

    著名的 curl ifconfig.me

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:36:43

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

    wget http://www.baidu.com/
    

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

    回覆
    0
  • 取消回覆