airport -s -x devuelve la salida truncada

0

Soy el autor de wifi-wand , una utilidad de línea de comandos de Ruby que se puede usar como una forma sencilla de administrar el WiFi de la Mac ( enlace ) 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 usar airport -s pero descubrí que no funciona porque como los nombres de red están justificados a la derecha (rellenado a la izquierda), no hay forma de saber si los espacios al principio son parte de El nombre o simplemente allí 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 varias ubicaciones, 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 la opción -x , la salida funciona, pero, como digo, hay un problema de 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é está pasando y cómo puedo solucionar esto? Gracias de antemano.

(El problema de Github se encuentra en enlace .)

Este error relacionado con HP se confirma en enlace , que dice:

Cuando ejecuta el aeropuerto con el indicador --xml, el comando no generará datos xml con el formato correcto ... una idea es que las impresoras HP están transmitiendo un SSID con caracteres no seguros ...

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

    
pregunta Keith Bennett 02.11.2018 - 19:23

1 respuesta

0

Partiendo de la idea de intentar hacer coincidir el BSSID y eliminarlo al final de la línea, se me ocurrió esto:

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

La línea sed es en realidad 3 partes:

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

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

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

La línea sort -u se asegura de que cada SSID solo aparezca una vez.

Tal vez no sea lo ideal, pero podría ser una opción.

El único "gotcha" posible 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 haga eso, y ninguna de las redes a las que tengo acceso incluye un cero en ellas, por lo que no puedo probarlas. Tal vez alguien que sea mejor en expresiones regulares pueda sugerir una mejor que la que tengo.

    
respondido por el TJ Luoma 03.11.2018 - 05:41

Lea otras preguntas en las etiquetas