我正在尝试使用C#中的NativeWifi编写WLAN指纹识别程序。为此,我运行一个循环来多次获取wlan信息,然后使用matlab来平均/分析数据。
问题在于,当程序运行时,即使我在房子周围移动,我也会得到所有相同的值。从互联网上我已经看到有一个存储可用网络数据的缓存。我想知道是否存在重置此缓存的系统调用。
我也使用cmd调用
看到了这一点netsh wlan show networks mode = bssid
这给了我相同的值,直到我在我的操作系统中打开可用的wifi网络,如果我再次运行它,它将给出不同的值。
编辑:这个系统仅供我使用,所以如果有一个已知的库可以为我处理这个问题,我会很乐意在Linux平台上重新开始。我甚至不知道谷歌甚至可以获取信息。任何与“网络缓存”相关的东西都会让我帮助不相关主题的线索......
我将在下面提供我的代码的相关部分:
<div id="vtab">
<ul>
<li class="user"><a href="#">User</a></li>
<li class="category"><a href="#">Category</a></li>
</ul>
<!--user-->
<div>Content</div>
</div>
<!--category-->
<div>Content</div>
</div>
答案 0 :(得分:2)
在内部,netsh由this API提供支持。这意味着,调用netsh wlan show networks mode = bssid只返回上次扫描期间出现的网络缓存。这就是你发现的。
这意味着为了刷新此缓存,您需要触发扫描。如果您使用的C#库包含它,您可以通过调用WlanScan按需进行此操作。我不确定您使用的是哪个C#包装器,但它可能包含此功能。当你得到scan complete notification(注册源WLAN_NOTIFICATION_SOURCE_ACM并注意wlan_notification_acm_scan_list_refresh)时,应该更新缓存。
如果您让我知道您使用的是哪个C#库,也许我可以为您指出相关功能。
您提到打开可用网络会导致缓存刷新。这是因为打开可用网络会触发对WlanScan的调用。
配置文件与可用网络列表无关 - 配置文件是Wlan服务用于跟踪计算机上配置的网络的内容 - 删除它们不会再次扫描WlanSvc。删除它们恰好与扫描一致可能是巧合,但它比设计用法更具副作用。
编辑:要使用您正在使用的托管Wifi API订阅通知,此代码段应该有效:
wlanIface.WlanNotification += wlanIface_WlanNotification;
回调:
static void wlanIface_WlanNotification(Wlan.WlanNotificationData notifyData)
{
if (notifyData.notificationCode == (int)Wlan.WlanNotificationCodeAcm.ScanComplete)
{
Console.WriteLine("Scan Complete!");
}
}
您可以通过运行此操作进行测试,然后在Windows上打开可用的网络。您应该看到&#34;扫描完成&#34;每次打开后不久。如果您愿意,可以使用消息框而不是Console.WriteLine。
自己触发扫描:
wlanIface.Scan();
答案 1 :(得分:0)
适用于所有
netsh wlan delete profile name=* i=*
您可能不希望在所有接口上执行此操作,并在其中对接口进行硬编码以获得更快的结果