当我尝试制作一个使用程序扫描无线网络的 python 程序时,我第一次遇到了这个问题。我使用过以下工具:
iwlist、iw、wpa_cli、nmcli 和 iwconfig
我在所有这些人身上都遇到了同样的行为。假设您坐在计算机和无线接入点/路由器旁边。键入以下命令之一,假设您的 wifi 适配器名为 wlan0,关闭路由器,然后在终端窗口中按 Enter 键。
iw wlan0 scan | grep SSID
iwlist wlan0 scan | grep SSID
wpa_cli -i wlan0 scan && wpa_cli -i wlan0 scan_results
nmcli device wifi rescan && nmcli device wifi list
所有命令在相当长的一段时间内仍然显示 SSID。我想象 E&M 驻波消失所需的时间会更长。有人能解决这个问题吗?
答案1
在默认配置下wpa_请求者可能会显示已缓存一段时间的扫描结果。
将此行添加到您的 wpa_supplicant.conf 文件中,以使扫描结果仅显示上次扫描期间检测到的 SSID:
ignore_old_scan_res=1
答案2
我很久以前就解决了这个问题,很抱歉没有得到答复。以下 wpa_supplicant 设置负责上面提到的 wifi 行为:
bss_expire_count 和 bss_expire_age
前者是在将 SSID 从列表中删除之前必须缺少多少次扫描。后者是 SSID 不再广播后显示的时间(以秒为单位)
答案3
以上都不适合我。我发现使关闭的网络不显示在 wifi 扫描结果中的唯一一致方法是重新加载无线接口的内核模块,这会完全刷新先前扫描的所有缓存结果。
要在 shell 脚本中遵循此策略,只需包含以下行:
# as appropriate for your system:
iface=wlan0
# reload kernel module:
module=$(basename $(readlink -f /sys/class/net/$iface/device/driver/module))
modprobe -r $module
modprobe $module
# bring interface back up:
ifconfig $iface up
# scan for hotspots using your preferred method (I happen to like iwlist):
iwlist $iface scanning