![WiFi 扫描显示断电网络的 SSID,以便随后进行多次扫描](https://linux22.com/image/117677/WiFi%20%E6%89%AB%E6%8F%8F%E6%98%BE%E7%A4%BA%E6%96%AD%E7%94%B5%E7%BD%91%E7%BB%9C%E7%9A%84%20SSID%EF%BC%8C%E4%BB%A5%E4%BE%BF%E9%9A%8F%E5%90%8E%E8%BF%9B%E8%A1%8C%E5%A4%9A%E6%AC%A1%E6%89%AB%E6%8F%8F.png)
当我尝试制作一个使用程序扫描无线网络的 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