Wie erhält man programmgesteuert verfügbare WLAN-Netzwerke ohne Flughafendienstprogramm?

Gibt es eine andere Möglichkeit als die Verwendung des airportBefehlszeilendienstprogramms, um die Liste der verfügbaren WLAN-Netzwerke programmgesteuert abzurufen (für den Verbrauch durch eine Anwendung)? Hier ist der Kontext:

Ich habe eine Befehlszeilenanwendung zum Verwalten von WLAN-Netzwerken ( https://github.com/keithrbennett/wifiwand , gem install wifi-wand), in der ich die Liste der verfügbaren WLAN-Netzwerke mit erhalte airport -s.

Da die Netzwerknamen rechtsbündig dargestellt werden, gibt es leider keine Möglichkeit festzustellen, ob oder wie viele führende Leerzeichen der Name enthält. Es gibt eine -x-Option, um die Daten im XML-Format auszugeben, aber in Ruby erfordert das Analysieren von XML normalerweise die Installation des nokogiriGems, was legendär problematisch ist, und ich möchte das meinen Benutzern nicht aufzwingen. Also gehe ich diesen seltsamen und weniger als 100% zuverlässigen Prozess durch, um in den meisten, aber nicht allen Fällen die richtigen Ergebnisse zurückzugeben.

Welche anderen Möglichkeiten habe ich, falls vorhanden, um diese Informationen zu erhalten?

Antworten (1)

Sie könnten (falsch) verwenden awk, um das Ergebnis zu filtern:

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>

Nicht sehr schön, aber funktioniert :-)

OTOH, eine SSID kann alles sein, sie muss nicht einmal druckbar sein (siehe Gibt es einen Standard, der definiert, was eine gültige SSID und ein gültiges Passwort ist? ). Daher wird jeder Versuch, SSID in textbasierten Dienstprogrammen zu handhaben, wahrscheinlich früher oder später scheitern.

Danke, das ist großartig! Gibt es einen Grund für all die Leerzeichen im Befehl? Ich habe es entfernt und es scheint gut zu funktionieren: airport -s -x | awk '{ if (catch == 1) { print; catch=0 } } /SSID_STR/ { catch=1 }'.
@KeithBennett Kein technischer Grund, es ist nur einfacher zu lesen (zumindest für mich). Die Reihenfolge ist jedoch wichtig, Sie können die beiden Zeilen nicht vertauschen.
Danke. Ich möchte Ihnen die Namensnennung im Quellcode geben. Wäre das ok und wenn ja, wie? (Twitter-Handle usw.?)
@KeithBennett Ein Link zu meinem Benutzerprofil auf AD? Oder nimm den Twitter-Handle von der Profilseite :-)