在这个工具,无线接口的名称是硬编码的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。