有没有一种便携式方法可以在命令行上获取 WiFi 卡的名称而无需额外解析?

有没有一种便携式方法可以在命令行上获取 WiFi 卡的名称而无需额外解析?

这个工具,无线接口的名称是硬编码的wlan0。在 Ubuntu 14.04 中,这是一个合理的假设,但无线接口名称似乎在 Ubuntu 15.10 中发生了变化。

我想修改该工具以在运行时检测第一个无线接口的名称。

一种方法是从 的输出中解析名称iwconfig

iwconfig 2>&1 | grep ESSID | awk '{print $1}' | head -n 1

不幸的是,这种方法似乎相当脆弱,因为它取决于iwconfig.

是否有一个可移植的、更直接的命令可以在命令行上获取无线接口的名称?

答案1

在 Linux 上,网络设备列在 中/sys/class/net/。每个设备都有一个条目,其类型由 给出/sys/class/net/$finame/type。类型定义在if_arp.h

#define ARPHRD_IEEE80211 801            /* IEEE 802.11

您应该能够通过以下方式找到给定类型的所有设备:

find_by_type() {
(
    cd /sys/class/net/ || return 1
    for dev in * ; do
        if test "$(cat "$dev/type")" = "$1" ; then
            echo $dev
        fi
    done
)
}

然后您可以:

wlan="$(find_by_type 801 | head -n1)"

然而,这仅适用于 Linux。

相关内容