如何重置WLAN信息的系统缓存?

时间:2015-06-11 16:27:17

标签: c# network-programming

我正在尝试使用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>

2 个答案:

答案 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=*

您可能不希望在所有接口上执行此操作,并在其中对接口进行硬编码以获得更快的结果