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


Réponses:


15

Sur Linux, vous avez iw(afficher / manipuler les périphériques sans fil et leur configuration) et lorsqu'ils sont utilisés avec la devcommande:

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 exemple

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.

J'aime cette réponse, elle résout le problème, mais le fait de ne pas gratter me préoccupe et me fait penser qu'il pourrait y avoir une meilleure façon. Je voudrais laisser ceci ouvert pour l'instant.
Matt Copperwaite

9

Sur Ubuntu au moins, il y a le /proc/net/wirelessfichier qui contient 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 perlcode imprime la chaîne de caractères de mot précédant les deux points.


Cela n'a pas fonctionné pour moi - probablement parce que ma carte sans fil est désactivée (mais détectable).
imbuedHope

9

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/netun wirelessrépertoire (qui peut être plus que des appareils WiFi) et le second trouve les appareils compatibles 802.11

Testé sur le noyau 4.4


7

En s'appuyant sur la réponse de Josh , j'utiliserai un glob de shell pour identifier les /sys/class/netrépertoires avec un wirelessrépertoire à l'intérieur et awkpour saisir 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

1

Manière universelle (non root) testée sur Android 4, Android 7.1 et Android 9 et ArchLinux.

ls /sys/class/ieee80211/*/device/net/
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.