Obtener nombres de dispositivos de interfaz Wi-Fi

Respuestas:

15

En Linux tiene iw(mostrar / manipular dispositivos inalámbricos y su configuración) y cuando se usa con el devcomando:

Commands:
    dev
        List all network interfaces for wireless hardware.

es decir

iw dev

obtendrás algo como:

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 desea extraer solo nombres de interfaces, siempre puede procesar la salida, por ejemplo

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

solo tenga en cuenta que la página de ayuda dice claramente:

Do NOT screenscrape this tool, we don't consider its output stable.
don_crissti
fuente
Me gusta esta respuesta, resuelve el problema, pero la parte de no raspar me preocupa y me hace pensar que puede haber una mejor manera. Me gustaría dejar esto abierto por ahora.
Matt Copperwaite
9

Al menos en Ubuntu, existe el /proc/net/wirelessarchivo que contiene detalles sobre las interfaces Wi-Fi. Que salidas para mí:

$ 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

Es un poco desordenado, pero el nombre del dispositivo está ahí.

Para obtener solo el nombre de la interfaz:

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

El perlcódigo imprime la cadena de caracteres de palabras que preceden los dos puntos.

Matt Copperwaite
fuente
Esto no funcionó para mí, probablemente porque tengo mi tarjeta inalámbrica desactivada (pero detectable).
imbuedHope
9

Si tiene sysfs montado en / sys, entonces funcionan los siguientes comandos:

# 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

O sin find:

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

El primero encuentra todos los dispositivos /sys/class/netcon un wirelessdirectorio (que puede ser más que solo dispositivos WiFi) y el segundo encuentra dispositivos que son compatibles con 802.11

Probado en el kernel 4.4

Josh
fuente
7

Sobre la base de la respuesta de Josh , usaré un globo de shell para identificar los /sys/class/netdirectorios con un wirelessdirectorio dentro y awkpara obtener el nombre del dispositivo:

# 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
fuente
1

Modo universal (no root) probado en Android 4, Android 7.1 y Android 9 y ArchLinux.

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