如何用C#获取WiFi当前实际使用的网络频段(而非PHY类型)?
获取当前WiFi实际使用频段的C#实现方案
核心结论:不能通过PHY类型(如802.11n)直接判断频段,也不能默认显示最高值——实际频段由当前连接的WiFi信道决定,必须通过查询信道号再映射到对应频段。
具体实现步骤
获取当前连接的WiFi信道号
通过Windows原生的WlanQueryInterface函数,指定wlan_intf_opcode_channel_number作为操作码,直接读取当前WiFi接口的连接信道号。这一步需要基于你已有的WLAN API互操作基础来扩展。通过信道号映射到频段
信道与频段的对应关系遵循标准WiFi规范:- 2.4GHz频段对应信道1-14(不同地区略有差异,比如美国仅开放1-11)
- 5GHz频段对应信道36-48(低段)、149-165(高段)等
C#代码示例
// 基于已有的WLAN API互操作基础,补充信道查询逻辑 uint opcode = WlanIntfOpcode.wlan_intf_opcode_channel_number; IntPtr pData = IntPtr.Zero; uint dataSize = 0; WlanOpcodeValueType opcodeType; // 调用WlanQueryInterface获取信道号 uint queryResult = Wlan.WlanQueryInterface( hClientHandle, // 已初始化的WLAN客户端句柄 hInterface, // 当前连接的WiFi接口句柄 opcode, IntPtr.Zero, ref dataSize, ref pData, out opcodeType ); if (queryResult == 0) // 查询成功 { int channelNumber = Marshal.ReadInt32(pData); string currentBand; // 根据信道号判断频段 if (channelNumber is >= 1 and <= 14) { currentBand = "2.4GHz"; } else if ((channelNumber is >= 36 and <= 48) || (channelNumber is >= 149 and <= 165)) { currentBand = "5GHz"; } else { currentBand = "未知频段"; } Console.WriteLine($"当前WiFi实际频段:{currentBand}"); Wlan.WlanFreeMemory(pData); // 释放API分配的内存 }
注意事项
- 不同国家/地区的WiFi信道开放范围可能有差异,但上述逻辑已覆盖绝大多数主流场景。
- 绝对不能仅通过PHY类型推断频段:比如802.11n同时支持2.4GHz和5GHz,实际使用哪个完全取决于当前连接的AP信道,必须以信道查询结果为准。
内容的提问来源于stack exchange,提问作者AyCe
相关产品推荐
相关产品推荐

