Uzyskaj nazwy urządzeń interfejsu Wi-Fi

Odpowiedzi:

15

W systemie Linux masz iw(pokaż / manipuluj urządzeniami bezprzewodowymi i ich konfiguracją), a gdy używasz devpolecenia:

Commands:
    dev
        List all network interfaces for wireless hardware.

to jest

iw dev

dostaniesz coś takiego:

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

Jeśli chcesz wyodrębnić tylko nazwy interfejsów, zawsze możesz przetworzyć dane wyjściowe, np

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

pamiętaj tylko, że strona pomocy wyraźnie stwierdza:

Do NOT screenscrape this tool, we don't consider its output stable.
don_crissti
źródło
Podoba mi się ta odpowiedź, rozwiązuje problem, ale troska o brak skrobania dotyczy mnie i sprawia, że ​​myślę, że może być lepszy sposób. Na razie chciałbym pozostawić to otwarte.
Matt Copperwaite,
9

W systemie Ubuntu jest przynajmniej /proc/net/wirelessplik zawierający szczegółowe informacje o interfejsach Wi-Fi. Które wyniki dla mnie:

$ 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

Jest trochę niechlujny, ale jest tam nazwa urządzenia.

Aby uzyskać tylko nazwę interfejsu:

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

perlKod drukuje ciąg znaków słownych poprzednich okrężnicy.

Matt Copperwaite
źródło
Nie działało to dla mnie - prawdopodobnie dlatego, że mam wyłączoną kartę bezprzewodową (ale wykrywalną).
nasycony Mam nadzieję,
9

Jeśli masz zamontowane sysfs w / sys, działają następujące polecenia:

# 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

Lub bez find:

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

Pierwszy znajdzie wszystkie urządzenia /sys/class/netza pomocąwireless katalogiem (który może być czymś więcej niż tylko urządzeniami Wi-Fi), a drugi znajduje urządzenia zgodne z 802.11

Testowane na jądrze 4.4

Josh
źródło
7

Opierając się na odpowiedzi Josha , użyję globu powłoki, aby zidentyfikować /sys/class/netkatalogi z wirelesskatalogiem w środku i awkpobrać nazwę urządzenia:

# 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
źródło
1

Uniwersalny sposób (inny niż root) testowany na Androidzie 4, Androidzie 7.1 i Androidzie 9 oraz ArchLinux.

ls /sys/class/ieee80211/*/device/net/
VasileM
źródło