获取接入点列表并使用Linux Mono / C#进行连接

本文关键字:Mono 连接 Linux 入点 接入 列表 获取 | 更新日期: 2023-09-27 17:55:48

我目前正在使用运行Ubuntu 15.10的便携式设备运行。这个想法是,这个单元将没有屏幕(辅助设备可以选择连接到它,但独立,它用于现场数据记录),并从SSID和Wifi密码列表中读取以在可用时连接到它们。

我们目前正在设备上使用 Mono C#,但在 wifi 方面遇到了障碍。

我的问题是:我是否需要在 C# 环境中实现一个类或 DLL 来获取接入点,并使用密码进行连接,或者,终端工具将 A) 返回可用 AP 列表和 B) 可以接收 SSID 和密码并尝试连接?

谢谢你的帮助。

当前解决方案:我运行一个 nmcli 进程,尝试解析传入的流(在 Linux 上还不擅长),以获取 SSID 列表。

经过一番比较,我运行了另一个进程,根据文本文件调用"nmcli dev wifi connect password"。

这目前正在工作,但我想知道是否有更好的解决方案。

编辑2:上述的主要问题是,如果提供了错误的密码,它将启动"需要密码"窗口并锁定系统。

编辑3:在弄乱nm-applet,杀死它以停止弹出窗口之后,出现了一系列802.1X错误,尽管不是每次。如果我尝试连接足够多次,它最终会成功。

编辑4:重新安装网络管理器似乎已经修复了一些问题,但仍然存在错误。

编辑5:关于iwConfig,我尝试过,但是当我使用iwlist wlan0 scan | grep ESSID时,它只返回当前连接的网络9/10次。

获取接入点列表并使用Linux Mono / C#进行连接

你基本上想为 NetworkManager 的 D-Bus API 实现一个 C# API。

要扫描可用的无线网络,您应该连接到NetworkManager的D-Bus,调用getDevices方法,并调用其getNetworks

请参阅 dbus-sharp 了解适用于单声道/C# 的 D-Bus API。在此处阅读有关NetworkManager的D-Bus API的更多信息。请参阅此处有关dbus-sharpNetworkManager之间交互的实现示例。

请记住,这仅适用于使用NetworkManager的Linux系统(几乎所有主要的Linux发行版,包括Ubuntu)。