![为什么“iw wlan0 scan”会导致错误“网络关闭(-100)”或“设备或资源繁忙(-16)”](https://linux22.com/image/1616841/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9Ciw%20wlan0%20scan%E2%80%9D%E4%BC%9A%E5%AF%BC%E8%87%B4%E9%94%99%E8%AF%AF%E2%80%9C%E7%BD%91%E7%BB%9C%E5%85%B3%E9%97%AD%EF%BC%88-100%EF%BC%89%E2%80%9D%E6%88%96%E2%80%9C%E8%AE%BE%E5%A4%87%E6%88%96%E8%B5%84%E6%BA%90%E7%B9%81%E5%BF%99%EF%BC%88-16%EF%BC%89%E2%80%9D.png)
为什么“iw wlan0 scan”不稳定?有时它会提供输出,但大多数时候什么都不返回,并提供“资源繁忙”或“网络已关闭”错误消息。我用 shell 脚本编写了此扫描,这是问题所在吗?还有其他关于根本原因/修复的想法吗?
是什么原因导致了这个资源繁忙问题?资源繁忙错误始终是上述两个错误中的第一个。
答案1
这是为了回答有关“网络中断”的问题部分
iw dev wlan0 scan
command failed: Network is down (-100)
对命令进行 strace 以找到问题的线索
access("/proc/net", R_OK) = 0
access("/proc/net/unix", R_OK) = 0
socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
ioctl(4, SIOCGIFINDEX, {ifr_name="wlan0", }) = 0
close(4) = 0
socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
ioctl(4, SIOCGIFINDEX, {ifr_name="wlan0", }) = 0
close(4) = 0
这表明问题源于接口状态。
现在,正如您所知,在正常运行中,当网络接口已激活并正在工作时,您会在输出的第三行看到现已弃用的 ifconfig
UP BROADCAST RUNNING MULTICAST
对于没有被激活的网络接口,没有“UP”和“RUNNING”,通常只是
BROADCAST MULTICAST
所以在做了简单的
ifconfig wlan0 up
要将 wlan0 接口置于“启动并运行”状态,命令
iw dev wlan0 scan
不再给出“网络已关闭”的错误消息,并对接口设备支持的WiFi频率进行了扫描。
有时错误消息比应有的更不透明。
至于为什么会出现错误消息“设备或资源繁忙”,这是因为一些其他 WiFi 相关程序正在运行并访问 WiFi 接口,例如 wpa_supplicant、hostapd、网络管理器、wicked、kismet、wavemon,这只是众多可能性中的六种,正如其他人在评论中正确指出的那样。