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.
don_crissti
la source
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.

Matt Copperwaite
la source
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

Josh
la source
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
D. Ben Knoble
la source
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/
VasileM
la source