¿Cómo obtener redes wifi disponibles mediante programación sin la utilidad del aeropuerto?

¿Hay alguna otra forma que no sea usar la airportutilidad de línea de comandos para obtener la lista de redes wifi disponibles mediante programación (para el consumo de una aplicación)? Aquí está el contexto:

Tengo una aplicación de línea de comandos para administrar redes wifi ( https://github.com/keithrbennett/wifiwand , gem install wifi-wand) en la que obtengo la lista de redes wifi disponibles usando airport -s.

Desafortunadamente, debido a que los nombres de las redes se presentan alineados a la derecha, no hay forma de determinar si contiene o no, o cuántos espacios iniciales contiene el nombre. Hay una opción -x para generar los datos en formato XML, pero en Ruby, el análisis de XML generalmente requiere la instalación de la nokogirigema, que es legendariamente problemática, y no quiero imponer eso a mis usuarios. Así que paso por este proceso extraño y menos del 100% confiable para devolver los resultados correctos en la mayoría de los casos, pero no en todos.

¿Cuáles son mis otras opciones, si las hay, para obtener esta información?

Respuestas (1)

Podrías (mal) usar awkpara filtrar el resultado:

airport -s -x| awk '          { if (catch == 1) { print; catch=0 } }
                   /SSID_STR/ { catch=1 }'
<string>UPC Wi-Free</string>
<string>UPCE191589</string>
<string>The Cloud</string>
<string>UPCE191589</string>
<string>The Cloud</string>

No es muy agradable, pero hace el trabajo :-)

OTOH, un SSID puede ser cualquier cosa, ni siquiera necesita ser imprimible (consulte ¿Existe un estándar que defina qué es un SSID y una contraseña válidos? ). Por lo tanto, cualquier intento de manejar el SSID en las utilidades basadas en texto probablemente fallará tarde o temprano.

¡Gracias, esto es genial! ¿Hay alguna razón para todos los espacios en blanco en el comando? Lo eliminé y parece funcionar bien: airport -s -x | awk '{ if (catch == 1) { print; catch=0 } } /SSID_STR/ { catch=1 }'.
@KeithBennett No hay razón técnica, es más fácil de leer (al menos para mí). Sin embargo, el orden es importante, no puede cambiar las dos líneas.
Gracias. Me gustaría darte la atribución en el código fuente. ¿Estaría bien, y si es así, cómo? (¿Manejador de Twitter, etc.?)
@KeithBennett ¿Un enlace a mi perfil de usuario en AD? O toma el identificador de Twitter desde la página de perfil :-)