WiFi 扫描显示断电网络的 SSID,以便随后进行多次扫描

WiFi 扫描显示断电网络的 SSID,以便随后进行多次扫描

当我尝试制作一个使用程序扫描无线网络的 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

相关内容