49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)

本章学习内容:

  • 1.WIFI如何开启
  • 2.扫描热点
  • 3.连接热点
  • 4. 断开热点
  • 5.关闭WIFI
  • 本节使用的是wpa_supplicant工具,它主要包含wpa_supplicant(命令行模式)与wpa_cli(交互模式)两个程序。

 

1.WIFI如何开启

ifconfig wlan0 up 
wpa_supplicant -Dnl80211 -i wlan0 -c /data/wpa_supplicant.conf -B
//根据配置文件/etc/wpa_supplicant.conf来初始化wlan0
//如果wpa_supplicant.conf文件为空,则不会自动连接,需要连接一次网络才行

 wpa_supplicant.conf文件的意义:

    用来保存用户连接过的WIFI热点,好处在于,然后每次开启WIFI时,则会自动根据该文件来连接热点

注意: 该文件保存的每个热点都有个priority值,用来系统优先选择哪个热点

 

2.扫描热点

命令如下:

wpa_cli -i wlan0 scan              //扫描附近热点
wpa_cli -i wlan0 scan_result //打印热点信息

效果如下:

 

3.连接热点

wpa_cli -i wlan0 add_network // 添加一个网络连接,并返回网络ID号,如果wpa_supplicant.conf文件为空,则返回0,表示第一个热点,然后该ID号会在连接热点用到

添加网络连接的意义:

     用来区分用户连接过的每个热点


3.1以连接HibyMusic_5G-1为例

wpa_cli -i wlan0 set_network 0 ssid '"HiByMusic_5G-1"'    //设置ID为0的热点SSID
wpa_cli -i wlan0 set_network 0 psk '"hibymusic1109"'    //设置ID为0的热点的密码

PS:如果是没有加密的公共网络,则输入以下密码:

wpa_cli -i wlan0 set_network 0 key_mgmt NONE

继续输入:

wpa_cli -i wlan0 set_network 0 priority 2     //设置当前网络优先级,默认为2
wpa_cli -i wlan0 set_network 0 scan_ssid 1    //设置ssid默认为1即可
wpa_cli -i wlan0 enable_network 0            //启动连接ID为0的网络

wpa_cli -i wlan0 select_network 0             //选择网络0(这样做的好处在于,可以取消先前的其它网络连接)

udhcpc -b -i wlan0 -q    
         //此时只是连接上,所以还要自动分配IP地址,-b:后台(back) –i:指定接口 –q:获得续约后退出

如下图所示:

接下来ping一下:

ping通则可以上网了,其中-I表示指定网卡接口

 

 3.2 保存连接的配置

wpa_cli -i wlan0 save_config    //保存当前连接的网络配置到wpa_supplicant.conf文件中,使得下次自动连接

保存后的wpa_supplicant.conf文件如下所示:

 

3.3查看网卡当前连接的信息

wpa_cli -i wlan0 status    //查看当前网卡是处于什么状态

打印如下:

 

wpa_cli -i wlan0 list_network    //查看当前连接的是哪个网络

打印如下,可以看到当前连接的ID号为0:

 

 

4.断开热点

wpa_cli -i wlan0 disable_network 0    //与id0的网络进行断开
wpa_cli -i wlan0 remove_network 0     //将id0的网络移除掉,必须先断开才行
wpa_cli -i wlan0 save_config          //并更新wpa_supplicant.conf文件

配置后的wpa_supplicant.conf文件如下所示:

 

 

5.关闭WIFI

killall udhcpc > /dev/null
killall wpa_supplicant > /dev/null
ifconfig wlan0 down

 

在 Qt 中使用 wpa_cli 指令可以扫描附近的 WiFi 并自动连接。以下是实现步骤: 1. 在 Qt 项目中添加一个 QProcess 对象。 2. 在代码中使用 QProcess 对象执行 wpa_cli 指令来扫描 WiFi。例如: ``` QProcess process; process.start("wpa_cli scan"); process.waitForFinished(); ``` 3. 使用 QProcess 对象执行 wpa_cli 指令来列出扫描到的 WiFi。例如: ``` process.start("wpa_cli scan_results"); process.waitForFinished(); QString output = process.readAllStandardOutput(); QStringList lines = output.split("\n"); foreach (QString line, lines) { // 处理每个 WiFi 的信息 } ``` 4. 处理每个 WiFi 的信息,例如获取 SSID、信号强度等信息,并选择需要连接WiFi。 5. 使用 QProcess 对象执行 wpa_cli 指令来连接 WiFi。例如: ``` QString ssid = "wifi_ssid"; QString password = "wifi_password"; process.start("wpa_cli add_network"); process.waitForFinished(); QString output = process.readAllStandardOutput(); int networkId = output.trimmed().toInt(); process.start(QString("wpa_cli set_network %1 ssid '\"%2\"'").arg(networkId).arg(ssid)); process.waitForFinished(); process.start(QString("wpa_cli set_network %1 psk '\"%2\"'").arg(networkId).arg(password)); process.waitForFinished(); process.start(QString("wpa_cli enable_network %1").arg(networkId)); process.waitForFinished(); ``` 6. 连接成功后,使用 QProcess 对象执行 wpa_cli 指令来获取 IP 地址。例如: ``` process.start("wpa_cli status"); process.waitForFinished(); QString output = process.readAllStandardOutput(); QStringList lines = output.split("\n"); foreach (QString line, lines) { if (line.startsWith("ip_address=")) { QString ipAddress = line.mid(12); // 处理 IP 地址 break; } } ``` 以上是使用 wpa_cli 指令在 Qt 中扫描并自动连接附近的 WiFi 的步骤。需要注意的是,wpa_cli 指令需要在 Linux 系统中使用,因此需要在运行 Qt 程序的设备上安装 wpa_cli 工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值