Отримайте назви пристроїв інтерфейсу Wi-Fi


19

Як і в попередньому запитанні щодо пошуку назв мережевих пристроїв , я хотів би отримати (надійний) список назв пристроїв, але лише для пристроїв Wi-Fi. Так що це виглядає наступним чином залежно від вашої структури імен:

wlan0
wlan1

або

wlp5s0
wlp5s1

Відповіді:


15

На Linux у вас є iw(показуйте / маніпулюйте бездротовими пристроями та їх конфігурацією) та при використанні з devкомандою:

Commands:
    dev
        List all network interfaces for wireless hardware.

тобто

iw dev

ви отримаєте щось на кшталт:

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

Якщо ви хочете витягти лише імена інтерфейсів, ви завжди можете обробити вихід, наприклад

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

просто пам’ятайте, що на сторінці допомоги чітко зазначено:

Do NOT screenscrape this tool, we don't consider its output stable.

Мені подобається ця відповідь, вона вирішує проблему, але трохи про те, щоб не зішкріб, мене хвилює і змушує думати, що може бути кращий спосіб. Я хотів би покинути це відкритим.
Метт Коппервайт

9

Принаймні, на Ubuntu є /proc/net/wirelessфайл, який містить детальну інформацію про інтерфейси Wi-Fi. Які результати для мене:

$ 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

Це трохи безладно, але назва пристрою є там.

Щоб отримати лише ім'я інтерфейсу:

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

perlКод виводить рядок символів слова , попередні двокрапка.


Це не спрацювало для мене - ймовірно, тому що у мене відключена бездротова карта (але помітна).
набув надію

9

Якщо у вас / sys встановлено sysfs, працюють наступні команди:

# 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

Або без find:

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

Перші знахідки всі пристрої в /sys/class/netз wirelessдиректорії (які можуть бути більше , ніж просто WiFi пристроїв) , а другий знаходить пристрої , які є 802,11 сумісні

Тестовано на ядрі 4.4


7

Спираючись на відповідь Джоша , я використовую глобус оболонки, щоб ідентифікувати /sys/class/netкаталоги з wirelessкаталогом всередині, а awkтакож схопити ім’я пристрою:

# 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

1

Універсальний спосіб (без кореня) тестований на Android 4, Android 7.1 та Android 9 та ArchLinux.

ls /sys/class/ieee80211/*/device/net/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.