Как программно получить доступные сети Wi-Fi без утилиты аэропорта?

Есть ли способ, кроме использования airportутилиты командной строки, программно получить список доступных сетей Wi-Fi (для использования приложением)? Вот контекст:

У меня есть приложение командной строки для управления сетями Wi-Fi ( https://github.com/keithrbennett/wifiwand , gem install wifi-wand), в котором я получаю список доступных сетей Wi-Fi, используя файлы airport -s.

К сожалению, поскольку сетевые имена выровнены по правому краю, невозможно определить, содержит ли имя начальные пробелы и сколько их. Существует опция -x для вывода данных в формате XML, но в Ruby для разбора XML обычно требуется установка драгоценного камня nokogiri, что легендарно проблематично, и я не хочу навязывать это своим пользователям. Поэтому я прохожу этот странный и менее чем на 100% надежный процесс, чтобы вернуть правильные результаты в большинстве, но не во всех случаях.

Каковы мои другие варианты, если таковые имеются, для получения этой информации?

Ответы (1)

Вы можете (неправильно) использовать awkдля фильтрации результата:

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>

Не очень красиво, но работает :-)

OTOH, SSID может быть любым, его даже не нужно распечатывать (см. Существует ли стандарт, определяющий, что такое действительный SSID и пароль? ). Таким образом, любая попытка обработки SSID в текстовых утилитах, скорее всего, рано или поздно потерпит неудачу.

Спасибо, это здорово! Есть ли причина всех пробелов в команде? Я удалил его, и он, кажется, работает нормально: airport -s -x | awk '{ if (catch == 1) { print; catch=0 } } /SSID_STR/ { catch=1 }'.
@KeithBennett Никаких технических причин, это просто легче читать (по крайней мере, для меня). Однако порядок важен, вы не можете поменять местами две строки.
Спасибо. Я хотел бы указать вам авторство в исходном коде. Будет ли это нормально, и если да, то как? (дескриптор Твиттера и т. д.?)
@KeithBennett Ссылка на мой профиль пользователя в AD? Или возьмите дескриптор Twitter со страницы профиля :-)