2 votos

airport -s -x devuelve una salida truncada

Soy el autor de wifi-wand , una utilidad de línea de comandos de Ruby que puede utilizarse como una forma sencilla de gestionar el WiFi del Mac ( https://github.com/keithrbennett/wifiwand ) sin tener que aprender todos los diferentes comandos subyacentes de Mac OS y sus opciones.

Para obtener una lista de nombres de red, solía utilizar airport -s pero descubrí que no funciona porque como los nombres de red están justificados a la derecha (rellenados a la izquierda), no hay manera de saber si los espacios iniciales son parte del nombre o sólo están ahí para formatear. Así que uso airport -s -x para obtener la información mostrada en (pseudo)XML.

Esto casi siempre funciona, pero he notado que en varios lugares, si hay una red de impresoras HP, la salida termina en algún lugar de ese elemento. Por ejemplo:

           <key>SSID_STR</key>
           <string>DIRECT-0E-HP OfficeJet 4650</string>
           <key>WPS_PROB_RESP_IE</key>
            <dict>
                    <key>IE_KEY_WPS_AP_SETUP_LOCKED</key>
                    <true/>
                    <key>IE_KEY_WPS_CFG_METHODS</key>
                    <integer>0</integer>
                    <key>IE_KEY_WPS_DEV_NAME</key>
                    <string>DIRECT-0E-HP OfficeJet 4650</string>
                    <key>IE_KEY_WPS_DEV_NAME_DATA</key>
                    <data>
                    RElSRUNULTBFLUhQIE9mZmljZUpldCA0NjUw
                    </data>
                    <key>IE_KEY_WPS_MANUFACTURER</key>
                    <string>HP</string>
                    <key>IE_KEY_WPS_MODEL_NAME</key>
                    <string>OfficeJet 4650 series

Sin el -x opción, la salida funciona, pero, como digo, está el tema del espacio que me impide confiar en ella:

                        SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
                NETGEAR25-5G a0:04:60:1a:5a:89 -67  153,-1  Y  -- WPA2(PSK/AES/AES) 
 DIRECT-0E-HP OfficeJet 4650 ac:e2:d3:a9:d9:0f -90  6       Y  -- WPA2(PSK/AES/AES) 
                      iPhone b2:8d:6c:9f:dd:00 -49  1       Y  US WPA2(PSK/AES/AES) 
                   NETGEAR25 a0:04:60:1a:5a:87 -62  9       Y  -- WPA2(PSK/AES/AES) 
                   CBCI-4F58 60:3d:26:57:4f:5c -86  6       Y  -- WPA2(PSK/AES/AES) 

¿Qué ocurre y cómo puedo solucionarlo? Gracias de antemano.

(El tema de Github está en https://github.com/keithrbennett/wifiwand/issues/20 .)

Este error relacionado con HP se confirma en https://clburlison.com/MacOS-wifi-scanning/ que dice:

Cuando se ejecuta airport con la bandera --xml el comando fallaría en la salida de los datos xml correctamente formateados...una idea es que las impresoras HP están emitiendo un SSID con caracteres inseguros...

[que está cerca, pero es el nombre del modelo, no el SSID, lo que parece generar el error]

0 votos

@Buscar, es decir, el nombre de la empresa, es el mismo que el de la empresa. ¿Te refieres a SSID?

0 votos

Hasta ahora he visto 3 salidas de la condición de error, y todas tienen esto en común: 1) La salida siempre termina después de imprimir el valor de IE_KEY_WPS_MODEL_NAME, y 2) todas son impresoras HP. (He visto salidas para este campo en impresoras que no son HP que no causan este error.

2 votos

¿Has probado algo como airport -s -x | cat -v para ver si se envía algún carácter especial a la salida?

1voto

moodforaday Puntos 2633

Partiendo de la idea de tratar de igualar el BSSID y quitarlo hasta el final de la línea, se me ocurrió esto:

airport -s \
| sed 's# ..:..:..:..:..:.. .*##g ; s#^ *##g ; 1,1d' \
| sort -u

El sed La línea es en realidad de 3 partes:

  1. Coincide con el BSSID buscando 2 caracteres separados por dos puntos, repetidos 5 veces, y luego todo hasta el final de la línea ( .* )

  2. Coincidir desde el principio de la línea ( ^ ) y luego cualquier número de espacios ( .* )

  3. Se ha eliminado la primera línea ( 1,1d ) que tiene la información de la cabecera que no nos interesa: "SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)"

El sort -u se asegura de que cada SSID sólo aparezca una vez.

Quizá no sea lo ideal, pero podría ser una opción.

El único posible "gotcha" que se me ocurre es que creo que a veces los BSSID pueden reducirse a 1 carácter en lugar de 2 si el primer carácter es un cero, pero no estoy seguro de que airport hace eso, y ninguna de las redes a las que tengo acceso incluye un cero en ellas, así que no puedo probarlo. Tal vez alguien que es mejor en regexes puede sugerir una mejor que lo que tengo.

0 votos

No entiendo qué problema está tratando de resolver aquí. He podido utilizar airport -s (sin el -x ) para obtener los nombres de la red (estoy haciendo el análisis sintáctico en Ruby, por lo que tengo una tonelada de flexibilidad), pero con los nombres justificados a la derecha (rellenados a la izquierda) no había manera de diferenciar los espacios iniciales que eran parte del nombre y los espacios iniciales que estaban allí sólo para el formato. Lo siento, no fui claro al respecto en mi pregunta.

1 votos

Tienes mucha razón, no puedo imaginar por qué alguien pondría espacios al frente de su nombre SSID. Pensaba que sólo te preocupaban los espacios en el nombre del SSID.

0 votos

A mí también me sorprendió, pero en mis viajes he encontrado varios SSID con un espacio inicial, ¡e incluso 1 con 3 espacios iniciales! Y sí, lo siento, en mi mensaje original (que ya he editado para aclararlo) no dejé claro que me refería a los espacios iniciales.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X