Получить имена устройств с интерфейсом 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.
don_crissti
источник
Мне нравится этот ответ, он решает проблему, но немного о том, что я не очищаюсь, беспокоит меня и заставляет думать, что может быть лучше. Я хотел бы оставить это открытым пока.
Мэтт Коппервейт
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Код выводит строку символов слова , предшествующие двоеточие.

Matt Copperwaite
источник
Это не работает для меня - вероятно, потому что у меня отключена беспроводная карта (но обнаруживается).
Надеюсь Надежда
9

Если у вас есть sysfs, смонтированный в / sys, тогда работают следующие команды:

# 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

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

ls /sys/class/ieee80211/*/device/net/
VasileM
источник