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命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
随机推荐
- Spring系列-SpringBase+IOC
Spring 一.前言 Thinking is more important than learning 本文主要讲述spring 以及它的 IOC原理 代码地址:https://gitee.com/ ...
- 328 day07线程池、Lambda表达式
day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念 -[ ] 能够理解等待唤醒机制 -[ ] 能够描述Java中线 ...
- File Upload(文件上传)
一句话木马 <?php @eval($_POST['key']); ?> /*eval(phpcode) eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP ...
- 洛谷P1583——魔法照片(结构体排序)
https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...
- PTA——c++2017Final 圆周率山
为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率. 已知圆周率为:3. 1415926535 8979323846 2643383279 5028841971 6939 ...
- nginx 常用教程网址
nginx rewrite比较齐全的教程 http://www.bubuko.com/infodetail-1810501.html
- Jmeter 压力测试学习8--断言
断言成功是不会显示的,失败会有提示. 登录断言 一.添加断言 登录->添加->断言->响应断言 二.执行,查看断言 登录配置的都是正确的用户名跟密码 如果响应断言中内容改为:&quo ...
- Windows10通过WSL编译jdk12
Windows使用WSL编译OpenJDK 安装Ubuntu以及配置国内镜像 首选确保windows10已经安装了ubuntu 更换ubuntu20.04国内镜像,这里我选择的是阿里云镜像 sudo ...
- 计算机网络-4-1-2-分类的IP地址
有关IP最重要的文档就是互联网的正式标准RFC 791 IP地址及其表示方法 整个互联网就是一个单一,抽象的网络,IP地址就是给互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内都是 ...
- 踩坑系列《十二》解决连接云服务器的redis失败
在本地连接服务器redis的时候,发现连接失败,这是因为服务器上的redis开启保护模式运行,该模式下是无法进行远程连接的.只需要修改redis目录下的redis.conf文件,找到 protecte ...