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.

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.


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


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

1

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

ls /sys/class/ieee80211/*/device/net/
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.