Windows 10 未将 Wi-Fi 检测为计量连接

Windows 10 未将 Wi-Fi 检测为计量连接

我希望 Windows Wi-Fi 客户端检测无线连接计量连接。我发现802.11协议支持供应商特定信息元素 (IE). 这些 IE 被注入到信标和探测响应无线帧中。

我发现微软定义了自己的特定于供应商的 IE,以通知客户端有关通过 Wi-Fi 进行计量连接的信息(网络成本要素)和我的接入点的hostapd支持特定于供应商的功能。

根据(网络成本要素hostapd),我在我的OpenWRT路由器上添加了特定于供应商的字段:

0xDD (Vendor-specific record)
0x08 (Record length : 8 bytes)
0x00 0x50 0xF2 (Vendor: Microsoft)
0x11 (OUI Type: Network Cost)
0x00 0x00 0x00 0x02 (Portable Hotspot Default: Metered network; limit unknown or not yet reached; matches Windows default for mobile broadband connections.)

openwrt上的hostapd命令:

ubus call hostapd.wlan24 set_vendor_elements '{"vendor_elements": "dd080050f21100000002"}'
ubus call hostapd.wlan24 update_beacon 

使用通讯视窗,我捕获了无线流量,发现探测响应灯塔帧中有我提供给 hostapd 的数据(最后 10 个字节)。

0x0000   80 00 00 00 FF FF FF FF-FF FF XX XX XX XX XX XX   €...ÿÿÿÿÿÿXXXXXX
0x0010   EC 41 18 50 A7 35 00 8E-99 81 50 23 98 00 00 00   ìA.P§5.Ž™.P#˜...
0x0020   64 00 31 04 00 1B YY YY-YY YY YY YY YY YY YY YY   d.1...YYYYYYYYYY
0x0030   YY YY YY YY YY YY YY YY-YY YY YY YY YY YY YY YY   YYYYYYYYYYYYYYYY
0x0040   XX 01 08 82 84 8B 96 0C-12 18 24 03 01 0B 05 04   Y..‚„‹–...$.....
0x0050   00 02 00 00 2A 01 00 32-04 30 48 60 6C 30 14 01   ....*..2.0H`l0..
0x0060   00 00 0F AC 04 01 00 00-0F AC 04 01 00 00 0F AC   ...¬.....¬.....¬
0x0070   02 0C 00 0B 05 04 00 08-00 00 3B 02 51 00 2D 1A   ..........;.Q.-.
0x0080   EC 01 17 FF FF 00 00 00-00 00 00 00 00 00 00 01   ì..ÿÿ...........
0x0090   00 00 00 00 00 00 00 00-00 00 3D 16 0B 00 04 00   ..........=.....
0x00A0   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
0x00B0   00 00 7F 08 04 00 00 00-00 00 01 40 DD 18 00 50   ...........@Ý..P
0x00C0   F2 02 01 01 01 00 03 A4-00 00 27 A4 00 00 42 43   ò......¤..'¤..BC
0x00D0   5E 00 62 32 2F 00 DD 08-00 50 F2 11 00 00 00 02   ^.b2/.Ý..Pò.....

我连接到此 AP 并使用 Windows PC 上的 MS Powershell 检查连接是否计量:

[void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]
[Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile().GetConnectionCost()

并得到回应

ApproachingDataLimit          : False
NetworkCostType               : Unrestricted
OverDataLimit                 : False
Roaming                       : False
BackgroundDataUsageRestricted : False

其中NetworkCostTypeUnrestricted或 而Unknown不是 预期Fixed

当我在 Windows PC 上手动将此连接设置为计量时,powershell 说NetworkCostType : Fixed


一段时间后,我发现另一个 AP(不是我的,隐藏的)正在广播信标。在这些信标中,我发现相同的供应商特定扩展的长度0x11Microsoft16 字节,并且

DD 10 00 50 F2 11 | 01 10 02 28 2C 30 00 00 00 01 00 00
or
DD 10 00 50 F2 11 | 01 10 02 28 2C 30 00 00 00 00 00 00 (deffers 3rd byte from the end)

0x0000   80 00 00 00 FF FF FF FF-FF FF 62 45 BD 07 36 9A   €...ÿÿÿÿÿÿbE½.6š
0x0010   62 45 BD 07 36 9A 80 71-87 80 70 00 00 00 00 00   bE½.6š€q‡€p.....
0x0020   64 00 31 C6 00 00 DD 10-00 50 F2 11 01 10 02 28   d.1Æ..Ý..Pò....(
0x0030   2C 30 00 00 00 01 00 00-                          ,0......
---
0x0000   80 00 00 00 FF FF FF FF-FF FF 62 45 BD 07 36 9A   €...ÿÿÿÿÿÿbE½.6š
0x0010   62 45 BD 07 36 9A D0 B4-16 FE 38 03 00 00 00 00   bE½.6šÐ´.þ8.....
0x0020   64 00 31 C6 00 00 DD 10-00 50 F2 11 01 10 02 28   d.1Æ..Ý..Pò....(
0x0030   2C 30 00 00 00 00 00 00-                          ,0......

我发现OUI 0x11Vendor 0x00 0x50 0xF2一样的 - 也许 MS Docs 错了?我在我的接入点上尝试了同样的方法,结果是一样的 - 数据在无线帧中,但 Windows 10 不会将连接设置为计量的。

有什么帮助吗?也许我哪里犯了错误?也许它依赖于无线驱动程序?也许 MS 有文档,但没有在桌面系统中实现它?


手动设置Metered connection不是我想要解决这个问题的方法。

答案1

  1. 曾是错误微软文档:正确的数据包是DD080050F211??00**00,其中??Cost Level**Cost Flags

成本水平:

  • 00 Unknown- 连接费用未知。
  • 01 Unrestricted- 连接不受限制,且使用限制不受限制。
  • 02 Fixed- 使用量计入用户已支付(或同意支付)的固定数据配额。
  • 04 Variable- 连接成本按每个字节计算。

成本标志:

  • 00 Unknown- 用途未知或不受限制。
  • 01 Over Data Limit- 使用量超出了计量网络的数据限制;可能适用不同的网络费用或条件。
  • 02 Congested- 网络运营商正在经历或预计会出现高负载。
  • 04 Roaming- 网络共享连接在提供商的家庭网络或附属网络之外漫游。
  • 08 Approaching Data Limit- 使用量接近计量网络的数据限制;一旦达到限制,可能会适用不同的网络费用或条件。

正确的 MS Docs MS-NCT


  1. 似乎当您手动触发开关时Metered connection,Windows 会忽略 802.11 IE,直到您忘记网络(或可能不会)。

对于 OpenWRT 接入点我的史诗问题导致 4 条命令

uci add_list wireless.radio0.hostapd_options='vendor_elements=DD080050F21102000200'
uci add_list wireless.radio1.hostapd_options='vendor_elements=DD080050F21102000200'
uci commit
reboot

我已经Fixed用标志添加了成本级别Congested。不知道拥堵是否会产生影响。

hostapd_options是 /etc/config/wireless (或uci radio?.hostapd_options)中未记录的参数,但它自 2017 年起就存在

相关内容