就像我标题所说的,有没有办法让你的电脑在不能上网的情况下,让它以为自己能上网呢?就是把右下角的小球变成显示器,虽然这听起来很神金,但是是可以的。你可以看看我现在状态就是,显示有Internet连接,但是实际上上不了网
原理
从Windows 10 1607版本开始,判断网络状态是通过让计算机访问http://www.msftconnecttest.com/connecttest.txt这个网址,网络连通情况下,浏览器访问这个URL返回的结果是文本Microsoft Connect Test微软连接测试。结果一致,网络图标就会变成小地球,有网络的状态。(其实还要满足一个DNS的解析,后面说)
但是这套系统有个漏洞:没有规定一定是要访问微软的这个服务器啊,也就是说,只要打开一个网址是http://www.msftconnecttest.com/connecttest.txt的网页,也能实现相同的效果。
Windows 操作系统检测网络的方法如下:
当计算机网络发生更改(如重启、更改 IP 地址、连接到不同网络等)时,系统会自动进行网络状态检测。它首先尝试连接 http://www.msftconnecttest.com/connecttest.txt(也有可能是http://www.msftncsi.com/ncsi.txt这是因为Windows的版本而不同,具体可以去注册表查看) ,该文本文件的编码格式为 ANSI,内容仅为一行“Microsoft Connect Test”,无回车符等其他多余字符。同时,计算机会尝试解析域名 dns.msftncsi.com,其解析结果应为固定值 131.107.255.255。
注意:需要网页回显的内容与DNS解析的地址都匹配上了才行
如果能够成功打开 connecttest.txt且返回Microsoft Connect Test 并且正确解析 dns.msftncsi.com,则 Windows 系统会提示可以正常连接网络,并相应地切换右下角的网络状态显示。
在 Windows 10 18362(即 1903)版及以后的新版本中,连网返回值功能有了变化,反映为6个注册表项。如果国内部分运营商的网络重定向不能得到正确反馈,可能会出现实际能上网但显示为无 Internet 的问题。此时,可以打开注册表编辑器,在
“计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet”
路径下,将注册表中对应的新版本键值修改为 Windows 10 旧版本的键值,并确保 enableactiveprobing 键值为 1,然后重启电脑,网络状态显示可能会恢复正常。
具体的对应键值对修改如下:
“activewebprobehost”=“dns.msftncsi.com” "指定解析的域名"
“activednsprobecontent”=“131.107.255.255” "域名解析到的IP"
比如这里就是 解析域名"dns.msftncsi.com"的地址为"131.107.255.255"则判断检测通过
“activewebprobehost”=“www.msftconnecttest.com” "访问的网站"
“activewebprobepath”=“connecttest.txt” "访问的网站下的文件"
“activewebprobecontent”=“microsoftncsi” "文件返回的内容"
比如这里就是 自动访问"http://www.msftconnecttest.com/connecttest.txt"
的内容为"microsoftncsi"则判断检测通过
“enableactiveprobing”=“1” "是否启用NCSI,1为启用,0为关闭"
另外,在 Windows 10 或更高版本中,网络连接状态指示器(NCSI)发送 DNS 请求以解析 www.msftconnecttest.com 地址,如果收到有效响应,则向其发送纯 HTTP GET 请求 http://www.msftconnecttest.com/connecttest.txt,并确保该文件包含 microsoft connect test,之后会发送另一个 DNS 请求来解析 dns.msftncsi.com 地址。如果这些请求中的任何一个失败,任务栏将显示相应的网络警报;如果所有请求都成功,任务栏将显示通常的网络图标。
而在 Windows 8.1 或更早版本中,NCSI 发送 DNS 请求以解析 www.msftncsi.com 地址,后续步骤与 Windows 10 或更高版本类似。
如果不想让微软知道网络连接状况,也可以通过修改注册表禁用网络连接状态检测功能。在注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet 位置,将 enableactiveprobing 的默认键值由 1 更改为 0 即可禁用网络连接指示器。
需要注意的是,利用技术手段获取他人网络连接状态等信息而未经授权是不合法和不道德的行为,应遵循相关法律法规和道德准则使用这些信息。同时,确保计算机系统的安全性和隐私保护非常重要,及时更新操作系统、安装安全软件等措施有助于防止潜在的网络威胁。
实验操作步骤
接下来开始演示如何一步步操作完成效果,我用的系统是两台Windows Server 2022,Windows Server 2022(1)为伪装的服务器(以下简称Server),Windows Server 2022(2)为验证效果的客户机(以下简称Client)
IP地址配置:
Server
Client
值得一提的是Client必须要配置默认网关并指向Server,否则会导致网络状态检测失败,具体原因未知
Server相关配置
①安装DNS、IIS服务
用管理员打开cmd或者powdershell,输入以下命令安装对应服务
Install-WindowsFeature web-server -IncludeManagementTools //安装IIS
Install-WindowsFeature dns -IncludeManagementTools //安装DNS
②配置DNS服务器
注意:DNS解析相关配置根据注册表的情况按需求来
创建正向解析区域msftconnecttest.com和msftncsi.com并分别建立主机A记录
③配置IIS服务器
注意:IIS与txt文件内容相关配置根据注册表的情况按需求来
创建网站根目录,并创建connecttest.txt文件,写好内容
添加网站,配置好相关参数
④测试
在Client重启网卡,观察结果
可以看到,已经成功显示有网但是无法上网☝🤓
可是这样有什么用呢?
其实是有用的,比如有时候可能会遇到电脑能上网,但是右下角显示“无Internet访问”并且是小地球,这个时候我们就可以通过修改ncsi相关注册表,让右下角的显示恢复正常
之前就有一段时间,因为微软的网站被众所周知的原因无法访问了,就导致很多人反馈“能上网但是没有网络的情况”
还有一个用处就是,如果你的电脑是使用无线网络的话,就可以做到在没有网络的时候开启热点,虽然我不知道这样做有什么用就是了☝🤓,可能是为了共享资料吧(网络共享)