Dapatkan nama perangkat antarmuka Wi-Fi

Jawaban:

15

Di linux Anda memiliki iw(tampilkan / manipulasi perangkat nirkabel dan konfigurasinya) dan ketika digunakan dengan devperintah:

Commands:
    dev
        List all network interfaces for wireless hardware.

itu adalah

iw dev

Anda akan mendapatkan sesuatu seperti:

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

Jika Anda hanya ingin mengekstrak nama antarmuka, Anda selalu dapat memproses output mis

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

hanya perlu diingat halaman bantuan dengan jelas menyatakan:

Do NOT screenscrape this tool, we don't consider its output stable.
don_crissti
sumber
Saya suka jawaban ini, itu memecahkan masalah, tetapi sedikit tentang tidak menggores perhatian saya dan membuat saya berpikir mungkin ada cara yang lebih baik. Saya ingin membiarkan ini terbuka untuk saat ini.
Matt Copperwaite
9

Setidaknya di Ubuntu, ada /proc/net/wirelessfile yang berisi detail tentang antarmuka Wi-Fi. Output mana untuk saya:

$ 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

Agak berantakan tapi nama perangkatnya ada di sana.

Untuk mendapatkan nama antarmuka saja:

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

The perlkode mencetak string karakter kata sebelumnya usus besar.

Matt Copperwaite
sumber
Ini tidak berhasil bagi saya –mungkin karena kartu nirkabel saya dinonaktifkan (tetapi terdeteksi).
Diimbau Semoga
9

Jika Anda memiliki sysfs yang terpasang di / sys maka perintah berikut ini berfungsi:

# 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

Atau, tanpa find:

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

Yang pertama menemukan semua perangkat /sys/class/netdengan wirelessdirektori (yang mungkin lebih dari sekadar perangkat WiFi) dan yang kedua menemukan perangkat yang kompatibel dengan 802.11

Diuji pada kernel 4.4

Josh
sumber
7

Berdasarkan jawaban Josh , saya akan menggunakan shell glob untuk mengidentifikasi /sys/class/netdirektori dengan wirelessdirektori di dalamnya, dan awkuntuk mengambil nama perangkat:

# 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
sumber
1

Cara universal (non root) diuji pada Android 4, Android 7.1 dan Android 9 dan ArchLinux.

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