web-dev-qa-db-fra.com

Obtenir les noms des périphériques de l'interface Wi-Fi

Semblable à une question précédente sur la recherche de noms de périphériques résea , je voudrais obtenir une liste (fiable) de noms de périphériques, mais uniquement pour les périphériques Wi-Fi. Pour qu'il ressemble à ceci en fonction de votre structure de nommage:

wlan0
wlan1

ou

wlp5s0
wlp5s1
21
Matt Copperwaite

Sur linux, vous avez iw (afficher/manipuler les périphériques sans fil et leur configuration) et lorsqu'il est utilisé avec la commande dev:

Commands:
    dev
        List all network interfaces for wireless hardware.

c'est

iw dev

vous obtiendrez quelque chose comme:

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

Si vous souhaitez extraire uniquement les noms d'interfaces, vous pouvez toujours traiter la sortie, par ex.

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

gardez à l'esprit que la page d'aide indique clairement:

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

Si vous avez monté sysfs sur/sys, les commandes suivantes fonctionnent:

# 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

Ou, sans find:

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

Le premier trouve tous les appareils dans /sys/class/net avec un répertoire wireless (qui peut être plus que des périphériques WiFi) et le second trouve des périphériques compatibles 802.11

Testé sur le noyau 4.4

9
Josh

Sur Ubuntu au moins, il y a le /proc/net/wireless fichier contenant des détails sur les interfaces Wi-Fi. Quelle sortie pour moi:

$ 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

C'est un peu compliqué, mais le nom de l'appareil est là.

Pour obtenir uniquement le nom de l'interface:

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

Le code Perl imprime la chaîne de caractères Word précédant les deux-points.

9
Matt Copperwaite

En s'appuyant sur réponse de Josh , je vais utiliser un glob Shell pour identifier le /sys/class/net répertoires contenant un répertoire wireless et awk pour récupérer le nom du périphérique:

# 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
7
D. Ben Knoble

Méthode universelle (non root) testée sur Android 4, Android 7.1 et Android 9 et ArchLinux).

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