【问题标题】:How to get MAC address and channel info with Native Wifi API C++如何使用 Native Wifi API C++ 获取 MAC 地址和频道信息
【发布时间】:2014-02-02 15:44:26
【问题描述】:

我有这个:

WLAN_AVAILABLE_NETWORK_LIST *wlanNetworkList = (WLAN_AVAILABLE_NETWORK_LIST*)WlanAllocateMemory(sizeof(WLAN_AVAILABLE_NETWORK_LIST));

我使用 WlanGetAvailableNetworkList() 函数获取有关网络的信息。

但是在这个信息中没有mac地址或频道。 如何获得?

【问题讨论】:

    标签: c++ windows wifi


    【解决方案1】:

    我认为您要查找的信息在 WLAN_BSS_ENTRY 结构中。

    由于网络可能有多个接入点,因此至少对我而言,网络没有单个 MAC 地址是有意义的(也考虑 ad-hoc 网络),因此 MAC 地址不是网络属性的一部分(不是WLAN_AVAILABLE_NETWORK结构的数据成员)。

    使用WlanGetNetworkBssList (msdn library entry),您可以获得特定网络(通过传递 SSID)或无线 LAN 接口的所有网络的 BSS 条目列表。注意这个函数查询接入点:

    为每个无线网络返回的信息列表还包含由基础设施 BSS 网络的每个接入点或独立 BSS 网络(ad hoc 网络)的网络对等点返回的信息元素列表。


    顺便说一句:我认为您不需要为WLAN_AVAILABLE_NETWORK_LIST 结构和WlanAllocateMemory 分配缓冲区。 MSDN:

    如果调用成功,则返回的 WLAN_AVAILABLE_NETWORK_LIST 的缓冲区由 WlanGetAvailableNetworkList 函数分配。

    但是,您必须释放函数通过WlanFreeMemory 为列表分配的内存。

    另请参阅example in msdn library(该页面底部)。

    编辑:这个例子有点混乱,有一个名为pBssList的变量,它的类型是PWLAN_AVAIBLE_NETWORK_LIST,而不是顾名思义的PWLAN_BSS_LIST

    【讨论】:

    • 好的,谢谢,但现在我有另一个问题,如果我这样做:while(1){ ... WlanGetNetworkBssList(...) ... Sleep(5000) } 仅适用于第一次,其他时候 bssList 中的所有值都是 0。有什么建议吗?
    • 它适用于 Windows 7 上的我(定期调用 WlanGetNetworkBssList),因此需要更多的调用上下文来猜测问题所在。除此之外,这将是另一个问题。
    【解决方案2】:

    也许您会先尝试使用 WlanScan。 我尝试在汇编中编写 WlanApi,goasm。 我使用 WlanGetNetworkBssList。 一切正常,作为回报,我得到了 6 个字节的 mac,但只有前 3 个字节与我的路由器的 Mac 相同。我不明白为什么。也许我在 WlanApi.h 中写错了结构 我还在学习 ASM WlanApi.h MyCode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多