linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
最近在调试wifi,已经把wpa_supplicant 工具编译打包好了,为了测试wif驱动及wifi模块是否ok,需要用shell命令临时启动wifi服务连接wifi热点测试。
首先板子启动用ifconfig后先把wlan0启动起来
root@p1:/ # busybox-smp ifconfig wlan0 up
root@p1:/ # busybox-smp ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:13931 errors:0 dropped:0 overruns:0 frame:0
TX packets:13931 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:773000 (754.8 KiB) TX bytes:773000 (754.8 KiB) wlan0 Link encap:Ethernet HWaddr 7C:DD:90:EC:F2:1E
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:2 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
现在wlan0已经up起来了。
然后启动wpa服务,需要一个wpa_supplicant.conf,我的配置如下
update_config=1
ctrl_interface=/data/misc/wifi/wlan0
eapol_version=1
ap_scan=1
fast_reauth=1
其中的ctrl_interface就是用来和wpa_cli通信使用,其原理是wpa_supplicant是个干活的wifi服务器(比如连接wifi,断开wifi,启动热点等),wpa_cli就是个客户端,通过本地socket通信连接上wpa_supplicant服务器,发命令叫他干活。
现在把wpa_supplicant服务启动起来
root@p1:/ # wpa_supplicant -iwlan0 -c/system/etc/wifi/wpa_supplicant.conf -B
-B是在后台运行,如果想要看过程中的详细log,可以加上参数-dd,然后用logcat同时看log。
现在wpa服务已经起来了,下面用wpa_cli客户端连接到wpa
wpa_cli -iwlan0 -p/data/misc/wifi/wlan0
wpa_cli v2.1-devel-4.4.2
Copyright (c) 2004-2013, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license.
See README for more details. Interactive mode >
以上log显示已经连接上wpa了
如果wpa异常,cli就无法连接会看到一下log,然后wpa_cli处于阻塞状态
Could not connect to wpa_supplicant: wlan0 - re-trying
现在我们的wpa_cli已经连上了,可以通过命令来查看当前的wifi状态
> status
wpa_state=DISCONNECTED
p2p_device_address=7c:dd:90:ec:f2:1e
address=7c:dd:90:ec:f2:1e
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=0 BSSID=00:00:00:00:00:00 SSID=
现在我们还没有连接网络,首先使用scan命令扫描一下附近的wifi网络,然后使用scan_results显示扫描的结果
> scan
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=2 BSSID=00:00:00:00:00:00 SSID=
scan scan_interval scan_results
> scan_results
bssid / frequency / signal level / flags / ssid
50:fa:84:50:31:5e 2472 -75 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] \xe6\xb5\xb7\xe8\xb1\x9a
28:6c:07:41:ec:32 5745 -83 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] AirFly_5G
5e:ea:1d:8b:2b:58 5745 -86 [WPA2-PSK-CCMP][WPS][ESS] DIRECT-58-HP M130 LaserJet
f2:85:c1:92:1e:41 5765 -86 [WPA2-PSK-CCMP][ESS] AIRFLY-921E52
28:6c:07:41:ec:31 2417 -85 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] AirFly
2a:6c:07:41:ec:31 2417 -86 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] AirFly_Guest
dc:fe:18:14:e4:65 5805 -92 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] 632-5G
f4:28:53:b9:dc:00 5745 -92 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] Tony_5G_O
c0:21:0d:45:10:c1 5260 -76 [ESS] X-Link 10C1
f4:28:53:a6:ed:f1 5220 -90 [ESS] PIX-LINK_5G
2a:6c:07:40:ec:31 2417 -89 [ESS]
f4:28:53:a6:ed:f0 2437 -92 [ESS] PIX-LINK_2.4G
这里也支持命令的tab补全功能,现在已经扫描到附近的一些wifi热点了,比如AirFly,AirFly_5G等是我们办公室的无线网,由于这个wifi模块不支持5G频道,现在只能连接2.4G的,AirFly
下面我们来添加一个刚才扫描的网络进来
> add_network
0
> add_network
1
<network id> <variable> <value> = set network variables (shows
list of variables when run without arguments)
<network id> <variable> <value> = set network variables (shows
list of variables when run without arguments)
<network id> <variable> <value> = set network variables (shows
list of variables when run without arguments)
> set_network 1 ssid "AirFly"
OK
> set_network 1 psk "********"
OK
现在只是添加了网络,还没连接,真正连接命令是
enable_network n
后面的参数n就是刚才设置的那个网络 1
> enable_network 1
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with 28:6c:07:41:ec:31 (SSID='AirFly' freq=2417 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-ASSOC-REJECT status_code=1
<3>CTRL-EVENT-STATE-CHANGE id=1 state=0 BSSID=00:00:00:00:00:00 SSID=AirFly
<3>CTRL-EVENT-ASSOC-REJECT status_code=1
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with 28:6c:07:41:ec:31 (SSID='AirFly' freq=2417 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-ASSOC-REJECT status_code=1
<3>CTRL-EVENT-STATE-CHANGE id=1 state=0 BSSID=00:00:00:00:00:00 SSID=AirFly
<3>CTRL-EVENT-ASSOC-REJECT status_code=1
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with 28:6c:07:41:ec:31 (SSID='AirFly' freq=2417 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-STATE-CHANGE id=1 state=6 BSSID=00:00:00:00:00:00 SSID=AirFly
<3>Associated with 28:6c:07:41:ec:31
<3>CTRL-EVENT-STATE-CHANGE id=1 state=7 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>CTRL-EVENT-STATE-CHANGE id=1 state=8 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>WPA: Key negotiation completed with 28:6c:07:41:ec:31 [PTK=CCMP GTK=TKIP]
<3>CTRL-EVENT-CONNECTED - Connection to 28:6c:07:41:ec:31 completed (auth) [id=1 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>CTRL-EVENT-DISCONNECTED bssid=28:6c:07:41:ec:31 reason=15
<3>CTRL-EVENT-STATE-CHANGE id=1 state=0 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with 28:6c:07:41:ec:31 (SSID='AirFly' freq=2417 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-STATE-CHANGE id=1 state=6 BSSID=00:00:00:00:00:00 SSID=AirFly
<3>Associated with 28:6c:07:41:ec:31
<3>CTRL-EVENT-STATE-CHANGE id=1 state=7 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>CTRL-EVENT-STATE-CHANGE id=1 state=8 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>WPA: Key negotiation completed with 28:6c:07:41:ec:31 [PTK=CCMP GTK=TKIP]
<3>CTRL-EVENT-CONNECTED - Connection to 28:6c:07:41:ec:31 completed (auth) [id=1 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=28:6c:07:41:ec:31 SSID=AirFly
这个过程有点长,好几秒到最后显示
CTRL-EVENT-CONNECTED - Connection to 28:6c:07:41:ec:31 completed
的时候才是真正连接上了,现在再用status看一下wifi的状态
> status
bssid=28:6c:07:41:ec:31
ssid=AirFly
id=1
mode=station
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
p2p_device_address=7c:dd:90:ec:f2:1e
address=7c:dd:90:ec:f2:1e
<3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=28:6c:07:41:ec:31 SSID=AirFly
<3>CTRL-EVENT-CONNECTED - connection to 28:6c:07:41:ec:31 completed (auth) [id=1 id_str=]
> quit
现在显示已经连接上了wifi了,使用quit命令可以退出wpa_cli。
接下来用udhcpc处理ip地址的
root@p1:/ # busybox-smp ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:295043 errors:0 dropped:0 overruns:0 frame:0
TX packets:295043 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:16374716 (15.6 MiB) TX bytes:16374716 (15.6 MiB) wlan0 Link encap:Ethernet HWaddr 7C:DD:90:EC:F2:1E
inet6 addr: fe80::7edd:90ff:feec:f21e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:468 errors:0 dropped:203 overruns:0 frame:0
TX packets:10 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:136293 (133.0 KiB) TX bytes:1248 (1.2 KiB) root@p1:/ # busybox-smp udhcpc -iwlan0
udhcpc (v1.20.0) started
Sending discover...
Sending select for 192.168.11.55...
Lease of 192.168.11.55 obtained, lease time 43200
现在获取到一个可用的ip地址,使用ifconfig设置给wlan0
root@p1:/ # busybox-smp ifconfig wlan0 192.168.11.55
root@p1:/ # busybox-smp ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:326867 errors:0 dropped:0 overruns:0 frame:0
TX packets:326867 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:18140948 (17.2 MiB) TX bytes:18140948 (17.2 MiB) wlan0 Link encap:Ethernet HWaddr 7C:DD:90:EC:F2:1E
inet addr:192.168.11.55 Bcast:192.168.11.255 Mask:255.255.255.0
inet6 addr: fe80::7edd:90ff:feec:f21e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:765 errors:0 dropped:253 overruns:0 frame:0
TX packets:12 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:225470 (220.1 KiB) TX bytes:1960 (1.9 KiB)
网络现在算是简单的配好了,可以和电脑端用ping命令来看下是否连通
在pc上通过cmd窗口ping 192.158.11.55
C:\Users\LXN>ping 192.168.11.55 正在 Ping 192.168.11.55 具有 32 字节的数据:
来自 192.168.11.55 的回复: 字节=32 时间=23ms TTL=64
来自 192.168.11.55 的回复: 字节=32 时间=31ms TTL=64
来自 192.168.11.55 的回复: 字节=32 时间=27ms TTL=64
来自 192.168.11.55 的回复: 字节=32 时间=18ms TTL=64 192.168.11.55 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 18ms,最长 = 31ms,平均 = 24ms C:\Users\LXN>ping 192.168.11.55 正在 Ping 192.168.11.55 具有 32 字节的数据:
来自 192.168.11.55 的回复: 字节=32 时间=627ms TTL=64
来自 192.168.11.55 的回复: 字节=32 时间=580ms TTL=64
来自 192.168.11.55 的回复: 字节=32 时间=275ms TTL=64
请求超时。 192.168.11.55 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 3,丢失 = 1 (25% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 275ms,最长 = 627ms,平均 = 494ms
已经可以ping通,不过貌似不是很稳定,两次ping测试有一次丢掉了一个包。
linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi的更多相关文章
- [转] 关于linux下通过shell命令(自动)修改用户密码
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
- Linux下使Shell 命令脱离终端在后台运行
--Linux下使Shell 命令脱离终端在后台运行------------------------------------2014/02/14你是否遇到过这样的情况:从终端软件登录远程的Linux主 ...
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...
- (转)Linux下使Shell 命令脱离终端在后台运行
转自: http://www.linuxidc.com/Linux/2011-05/35723.htm 方法如下: (1)输入命令: nohup 你的shell命令 & (2)回车,使终端回到 ...
- Java调用Linux下的shell命令并将结果以流的形式返回
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public cl ...
- node.js在Linux下执行shell命令、.sh脚本
首先,引入子进程模块 var process = require('child_process'); 执行shell命令 调用该模块暴露出来的方法exec process.exec('shutdown ...
- Linux下使用Shell命令控制任务Jobs执行(转)
一.下列命令可以用来操纵进程任务: ps列出系统中正在运行的进程. kill发送信号给一个或多个进程(经常用来杀死一个进程). jobs列出当前shell环境中已启动的任务状态,若未指定jobsid, ...
- Linux下的shell与make
Linux下的shell与make 一.shell 1.1 什么是shell ● 用户与Linux的接口 ● 命令解释器 ● 支持多用户 ● 支持复杂的编程语言 ● Shell有很多种,如:csh,t ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
随机推荐
- RMQ区间最值查询
RMQ区间最值查询 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A, 回答若干询问RMQ(A,i,j)(i,j<= ...
- 学习PHP中国际化地数字格式处理
不知道大家有没有了解过,对于数字格式来说,西方国家会以三位为一个进位,使用逗号来分隔.比如,12345678,用标准的格式来表示的话就是 12,345,678 .不过我们中文其实并不会有这样的分隔符, ...
- PHP中的MySQLi扩展学习(六)MySQLI_result对象操作
在之前的文章中,我们就已经接触过 MYSQLI_result 相关的内容.它的作用其实就是一个查询的结果集.不过在 PDO 中,一般直接通过 query() 或者 PDOStatement 对象进行查 ...
- phpstorm一直 updating indices刷新
解决方法: File-> 选中 Invalidate Caches/Restart ->选中 Invalidate Caches/Restart
- 记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析
一:背景 1. 讲故事 上个月有位朋友加wx告知他的程序有挂死现象,询问如何进一步分析,截图如下: 看这位朋友还是有一定的分析基础,可能玩的少,缺乏一定的分析经验,当我简单分析之后,我发现这个dump ...
- Java面向对象系列(9)- 方法重写
为什么需要重写? 父类的功能,子类不一定需要,或者不一定满足 场景一 重写都是方法的重写,和属性无关 父类的引用指向了子类 用B类新建了A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转 ...
- Elasticsearch2.4.6版本 在linux 命令行 对数据的增删改操作
一._cluster系列:查询设置集群状态 1.设置集群状态 curl -XGET 10.68.120.167:9204/_cluster/health?pretty=true pretty=true ...
- javascript 实现php str_pad
* 查看php.net官方手册 string str_pad ( string $input , int $pad_length [, string $pad_string = " &quo ...
- ssh 登录远程服务器--config配置
一.config 配置案列 Host master HostName: 39.105.61.1 Port 22 User root IdentityFile <id_rsa> 二.配置讲解 ...
- P6880-[JOI 2020 Final]オリンピックバス【最短路】
正题 题目链接:https://www.luogu.com.cn/problem/P6880 题目大意 给出\(n\)个点\(m\)条边的有向图,边有边权和一个翻转权值. 翻转至多一条边使得\(1-& ...