在 Linux 中以编程方式连接到 wifi 网络

问题描述 投票:0回答:3

关于 Android 或 iOS 的此功能存在多个问题,但我正在尝试在 Linux(具体是 OpenWrt 15.05)上执行此操作。我想扫描无线网络,将列表呈现给用户,让他们选择一个并将用户名/密码发送到网络。

我使用 wireless_tools 包中的 iw_scan 编写了一个快速 C 程序,以便可以查看无线网络,但在尝试确定如何连接到无线网络时遇到问题。来自同一包的 iwconfig 似乎只是修改了已经存在的连接。

我花了几个小时上网冲浪,认为一定有一个包已经做到了这一点,因为这是一个非常常见的用例。有人知道吗?

谢谢。

linux wifi
3个回答
2
投票

wpa_supplicant

查看 wpa_supplicant 包。它包括

wpa_supplicant
守护进程,可以通过
wpa_cli
wpa_gui
实用程序或 D-Bus API 进行控制。

wicd
Network Manager
这样的程序在内部使用
wpa_supplicant


网络管理器

您还可以使用 D-Bus API 或命令行界面 (

nmcli
) 来实现
NetworkManager
。它提供了比
wpa_supplicant
更高级别的抽象。


0
投票

我已经尝试了很多解决方案,从

wicd
,到网络管理器的cli接口
nmcli
,到python中的wifi。我不需要 UI,我不需要网络管理器,而且 python wifi 项目太复杂,我遇到了一些问题。因此,我编写了一个简短的 bash 脚本,用于连接到 wpa 和开放网络(不支持 WEP),这是
wpa_passphrase
wpa_supplicant
上的包装器:

sudo apt-get install -y wireless-tools wpasupplicant expect macchanger
sudo wget -O /usr/local/bin/wifi-connect https://raw.githubusercontent.com/erjoalgo/erjoalgo-gnu-scripts/master/wifi-connect
sudo chmod +x /usr/local/bin/wifi-connect
wifi-connect -e Internet -p my-password
wifi-connect -h

wpa 密码文件(包括纯文本密码)保存在

$HOME/.config/wifi-connect
中,如果未提供 ESSID,它将自动连接到任何已知的可用网络。它支持通过macchanger更改iface mac地址。


0
投票

我就是这样做的

#!/bin/bash

# Set Wi-Fi credentials
ssid="your_wifi_name"
pass="your_wifi_password"

# Check Wi-Fi connection status
if nmcli d | grep 'wifi' | grep -q "$ssid"; then
    echo "Wi-Fi already connected."
else
    echo "Wi-Fi not connected. Connecting to $ssid."
    # Connect to the preferred Wi-Fi if not connected
    nmcli device wifi connect "$ssid" password "$pass"
fi

查看更多关于 nmcli

© www.soinside.com 2019 - 2024. All rights reserved.