Windows 怎麼知道我已連線到網際網絡? 原來當中大有文章!
標題這個問題好像很簡單, 但原來深入研究起來還真的不是”因為我能看到網頁嘛”這樣簡單的答案.
研究這個課題是由於公司內部的防火牆自動把一些連線封瑣起來,
檢視之下發現好些連線嘗試連接到以下一條連結:
http://www.msftncsi.com/ncsi.txt
看到MSFT, 很直覺覺得事情跟微軟有關係, 但是NCSI又是甚麼呢?
如果你到www.msftncsi.com 想看看關於它的資料, 你會得到這樣一個畫面
而直接看ncsi.txt的內容, 就比較明顯了
真的是微軟造的! 到Google追查之下才發現這個小文件的用途
NCSI, 全名是Network Connectivity Status Indicator, 是微軟用來測試設備有沒有連上網際網絡和報告狀況用的
這是由Vista年代開始引入的, 而且也提供有KB
大家如果有外遊的話, 很多時候在酒店雖然插上網線得到IP了
但還是需要輸入酒店提供的密碼才能上網, 這時Windows又會懂得提示你, 原來也是靠NCSI才做到的!
舊版本的Windows沒有這個功能, 可能你就在煩惱為什麼Skype打不通了!
NCSI執行時的整個過程是這樣的, 我還會以Wireshark輔助以提供更可靠的情報:
電腦原先處於無網絡狀態
1. 電腦啟動, 或網線接上了, 假設Windows經過DHCP得到IP Address
2. Windows 嘗試向DNS查詢一條A紀錄 www.msftncsi.com
3. 成功的話再查詢dns.msftncsi.com
固定是得到131.107.255.255這個結果的, 如果Windows發現得不到這個結果, 或者結果不相同
就會覺得電腦沒有正確得到網絡連接, 或會顯示不能接入網絡的訊息.
4. 假如以上步驟成功的話, 會向http://www.msftncsi.com/ncsi.txt 發出GET指令
如果成功得HTTP 200 OK的回應, 顯示電腦正確連接到網際網絡, 所以Windows 顯示有網際網絡連線
如果反解釋dns.msftncsi.com成功但HTTP GET這個步驟並沒有得到200 OK的結果
顯然是有某些原因封所了這個HTTP連線, 很多時候就是需要多鍵入一個使用者密碼
所以Windows會彈出一個訊息提示你可能需要提供更多資料才能進入網際網絡!
但如果這不是問題所在, Windows就可能會告訴你連接進了受限制的網絡了.
了解了這些, 我還是建議可以看看KB的描述
http://technet.microsoft.com/en-us/library/cc766017(WS.10).aspx
問題來了, 如果公司有些電腦根本就不會接觸網際網絡, 或防火牆並沒有開放80埠我們應該怎麼辦?
另外, 在KB中微軟在分頁中聲明了, 當我們發出DNS查詢及HTTP GET時,
微軟會把我們的IP和查詢時間記錄到IIS Log上, 這也引起了資安方面的問題.
基於以上問題, 微軟建議我們在某些情況下自設一台WEB服務器,
再來把流向www.msftncsi.com的東西以修改機碼的方式指向它, ncsi.txt文檔建議拿微軟的
因為有很多網上回報說它是一個特別的文檔(沒有EOL結尾), 如果自製的話很可能會失敗.
而機碼的位置在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet
如果你想把這個功能停用, 可以直接把EnableActiveProbing從1改成0
注意任何改變機碼的動作都可能對系統做成不能彌補的損害, 請備份後才修改!
參考連結:
http://technet.microsoft.com/en-us/library/cc766017(WS.10).aspx
http://blog.superuser.com/2011/05/16/windows-7-network-awareness/ Windows 7 Network Awareness: How Windows knows it has an internet connection
http://www.techrepublic.com/blog/data-center/what-do-microsoft-and-ncsi-have-in-common/ What do Microsoft and NCSI have in common?