标题这个问题好像很简单, 但原来深入研究起来还真的不是”因为我能看到网页嘛”这样简单的答案.

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?