【问题标题】:Get List of Access Points And Connect Using Linux Mono/C#获取接入点列表并使用 Linux Mono/C# 进行连接
【发布时间】:2016-11-09 17:49:20
【问题描述】:

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

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

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

感谢您的帮助。

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

经过比较,我运行另一个进程,基于文本文件调用“nmcli dev wifi connect password”。

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

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

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

编辑 4:重新安装 network-manager 似乎解决了一些问题,但仍然存在错误。

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

【问题讨论】:

  • @RQDQ 这基本上是关于如何通过命令行连接到 Ubuntu 中的 wifi 的问题,不是吗?没有太多理由使用 pinvoke 或其他东西,只需调用命令行工具即可。
  • @Evk - 不,问题是专门从 c#/mono 执行此操作。 OP 分享说他正在使用命令行,但效果不佳。
  • 我明白,但这很可能只是意味着他使用了错误的工具(或以错误的方式)。询问是因为试图了解您是否真的需要 pinvoke 解决方案或命令行工具。

标签: c# linux mono wifi


【解决方案1】:

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

要扫描可用的无线网络,你应该连接到 NetworkManager 的 D-Bus,调用getDevices 方法,然后调用它的getNetworks

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多