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
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.
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
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.
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
Méthode universelle (non root) testée sur Android 4, Android 7.1 et Android 9 et ArchLinux).
ls /sys/class/ieee80211/*/device/net/