为什么“iw wlan0 scan”会导致错误“网络已关闭(-100)”或“设备或资源繁忙(-16)”

pre*_*ish 3 linux wireless-networking ssid raspberry-pi

为什么“iw wlan0 scan”不稳定?有时它会提供输出,但大多数情况下不会返回任何内容,并提供“资源繁忙”或“网络已关闭”错误消息。我用 shell 脚本编写了这个扫描,这是问题吗?关于根本原因/修复还有其他想法吗?

是什么原因导致此资源繁忙问题?资源繁忙错误始终是上述两个错误中的第一个错误。

小智 5

这是为了回答有关“网络已关闭”的问题部分

     iw dev wlan0 scan 
     command failed: Network is down (-100)
Run Code Online (Sandbox Code Playgroud)

对命令进行 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
Run Code Online (Sandbox Code Playgroud)

这表明问题是由接口的状态引起的。

现在如您所知,在正常操作中,当网络接口已激活并正在工作时,您会在输出的第三行看到现已弃用的 ifconfig

      UP BROADCAST RUNNING MULTICAST
Run Code Online (Sandbox Code Playgroud)

对于未激活的网络接口,“UP”和“RUNNING”不存在,通常只是

      BROADCAST MULTICAST
Run Code Online (Sandbox Code Playgroud)

所以在做了简单的事情之后

      ifconfig wlan0 up
Run Code Online (Sandbox Code Playgroud)

要将 wlan0 接口置于“启动并运行”状态,请使用以下命令

      iw dev wlan0 scan
Run Code Online (Sandbox Code Playgroud)

不再给出错误消息“网络已关闭”,并扫描了接口设备支持的 WiFi 频率。

有时错误消息比应有的更加不透明。

至于为什么出现错误消息“设备或资源繁忙”,这是因为其他一些与 WiFi 相关的程序正在运行并访问 WiFi 接口,例如 wpa_supplicant、hostapd、网络管理器、wicked、kismet、wavemon,仅举六种可能性,正如其他人在评论中正确指出的那样。

  • 由于 `ifconfig` 是旧方法,我建议使用 `ip` 工具,该工具在较新的 ubuntus 上默认可用:`ip link set wlan0 up`。 (2认同)