Abrufen von Gerätenamen für die Wi-Fi-Schnittstelle

Antworten:

15

Unter Linux haben Sie iw(zeigen / manipulieren Sie drahtlose Geräte und deren Konfiguration) und bei Verwendung mit dem devBefehl:

Commands:
    dev
        List all network interfaces for wireless hardware.

das ist

iw dev

du bekommst so etwas wie:

phy#0
    Interface wlan0
        ifindex 3
        wdev 0x1
        addr 00:12:32:e4:18:24
        type managed
phy#1
    Interface wlan1
        ifindex 4
        wdev 0x2
        addr 00:12:22:c6:b2:0a
        type managed

Wenn Sie nur Schnittstellennamen extrahieren möchten, können Sie die Ausgabe immer verarbeiten, z

iw dev | awk '$1=="Interface"{print $2}'

Denken Sie nur daran, dass auf der Hilfeseite klar steht:

Do NOT screenscrape this tool, we don't consider its output stable.
don_crissti
quelle
Diese Antwort gefällt mir, sie löst das Problem, aber das Problem, nicht zu kratzen, beschäftigt mich und lässt mich denken, dass es einen besseren Weg gibt. Ich möchte das jetzt offen lassen.
Matt Copperwaite
9

Zumindest unter Ubuntu gibt es die /proc/net/wirelessDatei, die Details zu den Wi-Fi-Schnittstellen enthält. Welche Ausgänge für mich:

$ cat /proc/net/wireless
Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
wlp5s0: 0000   36.  -74.  -256        0      0      0     16  33004        0

Es ist ein bisschen chaotisch, aber der Gerätename ist da drin.

So erhalten Sie nur den Schnittstellennamen:

cat /proc/net/wireless | perl -ne '/(\w+):/ && print $1'

Der perlCode gibt die Zeichenfolge aus, die vor dem Doppelpunkt steht.

Matt Copperwaite
quelle
Dies hat bei mir nicht funktioniert - wahrscheinlich, weil ich meine WLAN-Karte deaktiviert (aber erkennbar) habe.
ImbuedHope
9

Wenn Sie sysfs unter / sys eingehängt haben, funktionieren die folgenden Befehle:

# find /sys/class/net -follow -maxdepth 2 -name wireless | cut -d / -f 5
wlan0
# find /sys/class/net -follow -maxdepth 2 -name phy80211 | cut -d / -f 5
wlan0

Oder ohne find:

for dev in `ls /sys/class/net`; do
  if [ -d "/sys/class/net/$dev/wireless" ]; then echo $dev; fi;
done

Der erste findet alle Geräte in /sys/class/neteinem wirelessVerzeichnis (das mehr als nur WiFi-Geräte sein kann) und der zweite findet Geräte, die 802.11-kompatibel sind

Getestet auf Kernel 4.4

Josh
quelle
7

Aufbauend auf Joshs Antwort benutze ich ein Shell-Glob, um die /sys/class/netVerzeichnisse mit einem darin enthaltenen wirelessVerzeichnis zu identifizieren und awkden Gerätenamen zu ermitteln:

# find the directories
$ printf '%s\n' /sys/class/net/*/wireless # substitute with phy80211 if desired
/sys/class/net/wlp4s0/wireless
# filter out the "device" part
$ printf '%s\n' /sys/class/net/*/wireless | awk -F'/' '{ print $5 }'
wlp4s0
D. Ben Knoble
quelle
1

Universeller Weg (nicht root) getestet auf Android 4, Android 7.1 und Android 9 und ArchLinux.

ls /sys/class/ieee80211/*/device/net/
VasileM
quelle