追加の解析なしでコマンドラインからWiFiカード名を取得する移植可能な方法はありますか?

追加の解析なしでコマンドラインからWiFiカード名を取得する移植可能な方法はありますか?

存在するこのツール、ワイヤレスインターフェースの名前はハードコードされていますwlan0。 Ubuntu 14.04ではこれは合理的な仮定ですが、Ubuntu 15.10ではワイヤレスインターフェイス名が変更されているようです。

実行時に最初のワイヤレスインターフェイスの名前を検出するようにツールを変更したいと思います。

1つの方法はの出力から名前を解析することです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でのみ動作します。

おすすめ記事