最近在调试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的更多相关文章

  1. [转] 关于linux下通过shell命令(自动)修改用户密码

    关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...

  2. Linux下使Shell 命令脱离终端在后台运行

    --Linux下使Shell 命令脱离终端在后台运行------------------------------------2014/02/14你是否遇到过这样的情况:从终端软件登录远程的Linux主 ...

  3. linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)

    程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...

  4. (转)Linux下使Shell 命令脱离终端在后台运行

    转自: http://www.linuxidc.com/Linux/2011-05/35723.htm 方法如下: (1)输入命令: nohup 你的shell命令 & (2)回车,使终端回到 ...

  5. Java调用Linux下的shell命令并将结果以流的形式返回

    import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public cl ...

  6. node.js在Linux下执行shell命令、.sh脚本

    首先,引入子进程模块 var process = require('child_process'); 执行shell命令 调用该模块暴露出来的方法exec process.exec('shutdown ...

  7. Linux下使用Shell命令控制任务Jobs执行(转)

    一.下列命令可以用来操纵进程任务: ps列出系统中正在运行的进程. kill发送信号给一个或多个进程(经常用来杀死一个进程). jobs列出当前shell环境中已启动的任务状态,若未指定jobsid, ...

  8. Linux下的shell与make

    Linux下的shell与make 一.shell 1.1 什么是shell ● 用户与Linux的接口 ● 命令解释器 ● 支持多用户 ● 支持复杂的编程语言 ● Shell有很多种,如:csh,t ...

  9. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

随机推荐

  1. python 小鸡飞行小游戏

    python 小鸡飞行小游戏 用空格键控制小鸡飞行 代码 import pygame.freetype import sys import random pygame.init() screen = ...

  2. PHP没有定时器?

    确实,PHP没有类似于JS中的setInterval或者setTimeout这样的原生定时器相关的函数.但是我们可以通过其他方式来实现,比如使用declare. 先来看看是如何实现的,然后我们再好好学 ...

  3. vue three.js 结合tween.js 实现动画过渡

    参考地址:https://www.jianshu.com/p/d6e3b4b153bb https://www.jqhtml.com/10513.html 官方文档:https://github.co ...

  4. 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 百篇博客分析OpenHarmony源码 | v3.05

    百篇博客系列篇.本篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...

  5. 高级测试必备技能,Jenkins

    Jenkins安装 前言 Jenkins是一个广泛用于持续构建的可视化web工具,就是各种项目的的"自动化"编译.打包.分发部署,将以前编译.打包.上传.部署到Tomcat中的过程 ...

  6. Liunx下Mysql,MongoDB性能优化的配置

    场景 这几天在赶十一上线的项目,但是突然发现接口性能不好,高并发支持不住.又不想改代码,就在数据库层面进行优化. Mysql 分区:项目中有对40万条的数据进行时间查询的要求,就算对DateTime建 ...

  7. Spring MVC面试复习整理

    Spring MVC Spring MVC 是Spring Framework 提供的 web 组件 它的实现基于 MVC 的设计模式:Model(模型层).View(视图层).Controller( ...

  8. 聊聊我对 GraphQL 的一些认知

    每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性.很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 de ...

  9. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...

  10. Serverless 是一种思想状态

    来源 | Serverless 公众号:作者 | Ben Kehoe:译者 | donghui 函数不是重点 如果你因为喜欢 Lambda 而选择 Serverless,你这样做的原因是错误的.如果你 ...