Windows 怎麼知道我已連線到網際網絡? 原來當中大有文章!

Windows 怎麼知道我已連線到網際網絡? 原來當中大有文章!

標題這個問題好像很簡單, 但原來深入研究起來還真的不是”因為我能看到網頁嘛”這樣簡單的答案.

image

研究這個課題是由於公司內部的防火牆自動把一些連線封瑣起來,

檢視之下發現好些連線嘗試連接到以下一條連結:

http://www.msftncsi.com/ncsi.txt

看到MSFT, 很直覺覺得事情跟微軟有關係, 但是NCSI又是甚麼呢?

如果你到www.msftncsi.com 想看看關於它的資料, 你會得到這樣一個畫面

image

 

而直接看ncsi.txt的內容, 就比較明顯了

image

真的是微軟造的! 到Google追查之下才發現這個小文件的用途

NCSI, 全名是Network Connectivity Status Indicator, 是微軟用來測試設備有沒有連上網際網絡和報告狀況用的

這是由Vista年代開始引入的, 而且也提供有KB

大家如果有外遊的話, 很多時候在酒店雖然插上網線得到IP了

但還是需要輸入酒店提供的密碼才能上網, 這時Windows又會懂得提示你, 原來也是靠NCSI才做到的!

舊版本的Windows沒有這個功能, 可能你就在煩惱為什麼Skype打不通了!

image

 

NCSI執行時的整個過程是這樣的, 我還會以Wireshark輔助以提供更可靠的情報:

電腦原先處於無網絡狀態

image

 

1. 電腦啟動, 或網線接上了, 假設Windows經過DHCP得到IP Address

image

 

2. Windows 嘗試向DNS查詢一條A紀錄 www.msftncsi.com

image

 

3. 成功的話再查詢dns.msftncsi.com

固定是得到131.107.255.255這個結果的, 如果Windows發現得不到這個結果, 或者結果不相同

就會覺得電腦沒有正確得到網絡連接, 或會顯示不能接入網絡的訊息.

image

 

4. 假如以上步驟成功的話, 會向http://www.msftncsi.com/ncsi.txt 發出GET指令

image

image

如果成功得HTTP 200 OK的回應, 顯示電腦正確連接到網際網絡, 所以Windows 顯示有網際網絡連線

image

 

如果反解釋dns.msftncsi.com成功但HTTP GET這個步驟並沒有得到200 OK的結果

顯然是有某些原因封所了這個HTTP連線, 很多時候就是需要多鍵入一個使用者密碼

所以Windows會彈出一個訊息提示你可能需要提供更多資料才能進入網際網絡!

但如果這不是問題所在, Windows就可能會告訴你連接進了受限制的網絡了.

image

 

了解了這些, 我還是建議可以看看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

注意任何改變機碼的動作都可能對系統做成不能彌補的損害, 請備份後才修改!

image

參考連結:

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?