You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#获取WiFi当前实际使用的网络频段(而非PHY类型)?

获取当前WiFi实际使用频段的C#实现方案

核心结论:不能通过PHY类型(如802.11n)直接判断频段,也不能默认显示最高值——实际频段由当前连接的WiFi信道决定,必须通过查询信道号再映射到对应频段。

具体实现步骤

  1. 获取当前连接的WiFi信道号
    通过Windows原生的WlanQueryInterface函数,指定wlan_intf_opcode_channel_number作为操作码,直接读取当前WiFi接口的连接信道号。这一步需要基于你已有的WLAN API互操作基础来扩展。

  2. 通过信道号映射到频段
    信道与频段的对应关系遵循标准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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:05