2016-07-07 2 views
3

В настоящее время я работаю с портативным устройством под управлением Ubuntu 15.10. Идея состоит в том, что у этого устройства не будет экрана (дополнительное устройство будет подключено к нему дополнительно, но оно будет автономным, оно предназначено для записи данных в поле) и прочитайте из списка SSID и Wifi-Passwords, чтобы подключиться к ним, когда доступный.Получить список точек доступа и подключиться с помощью Linux Mono/C#

В настоящее время мы используем Mono C# на устройстве, но попадаем в ловушку, когда дело доходит до Wi-Fi.

Мой вопрос заключается в следующем: существует ли класс или DLL для реализации внутри среды C# для получения точек доступа, а также для подключения с использованием пароля или, альтернативно, к терминальному инструменту, который будет A) возвращать список Доступные точки доступа и B) могут принимать SSID и пароль и пытаться подключиться?

Благодарим за помощь.

Текущее решение: Я запускаю процесс nmcli, пытаясь разобрать входящий поток (пока не очень хорошо на Linux), чтобы получить список SSID.

После некоторого сравнения я запустил другой процесс, назвав «nmcli dev wifi connect password» на основе текстового файла.

Это в настоящее время работает, но мне интересно, есть ли лучшие решения.

Редакция 2: Основная проблема с вышеизложенным заключается в том, что при наличии неверного пароля он запускает окно «Требуется пароль» и блокирует систему.

Редактирование 3: После того, как ворвался с помощью nm-апплета, убив его, чтобы остановить всплывающее окно, появилась серия ошибок 802.1X, хотя и не каждый раз. Если я попытаюсь подключиться достаточно времени, он в конечном итоге удастся.

Редактировать 4: Повторная установка сетевого менеджера, похоже, исправила несколько проблем, но все еще глючит.

Редактирование 5: Что касается iwConfig, я пробовал это, но обнаружил, что когда использовал iwlist wlan0 scan | grep ESSID, он возвращает только текущую подключенную сеть 9/10 раз.

+0

@RQDQ thats в основном вопрос о том, как подключиться к Wi-Fi в Ubuntu через командную строку, а не? Существует не так много причин использовать pinvoke или что-то в этом роде, просто вызовите инструменты командной строки. – Evk

+0

@Evk - нет, вопрос конкретно в том, чтобы делать это из C#/mono. OP поделился тем, что использует командную строку, но не работает. – RQDQ

+0

Я понимаю, но это скорее всего означает, что он использует неправильные инструменты (или неправильно). Спросить, потому что пытаться понять, действительно ли вам нужны решения pinvoke или инструменты командной строки, по-прежнему будут. – Evk

ответ

1

Вы в основном хотите реализовать API C# для API D-Bus NetworkManager.

Чтобы проверить доступные беспроводные сети, вы должны подключиться к D-Bus NetworkManager, вызвать метод getDevices и вызвать его getNetworks.

См. dbus-sharp для API D-Bus для моно/C#. Узнайте больше о D-Bus API NetworkManager в here. См. here пример реализации взаимодействия между dbus-sharp и NetworkManager.

Имейте в виду, что это будет работать только в системах Linux, которые используют NetworkManager (почти все основные дистрибутивы Linux, включая Ubuntu).