Wpa cli使用

来源:互联网 发布:手机pdf朗读软件 编辑:程序博客网 时间:2024/05/01 07:54

wpa_cli是什么

官方定义:
“wpa_cli is a text-based frontend program for interacting with wpa_supplicant”
wpa_cli是一个用于和WPAS交互的基于文本的前台程序。
我们可以这样理解,wpa_cli是一个无线网络配置工具。
它可以用于查询状态、更改配置、触发事件(scan/authentication/association)等。

wpa_cli的工作原理

简单来说,就是利用socket实现和WPAS的本地进程间通讯。

Wpa cli.png

wpa_cli的语法

wpa_cli [option...] [command]

wpa_cli的命令行选项option

wpa_cli [-p<path to ctrl sockets>] [-i<ifname>] [-hvB] [command..]
-h = 显示帮助信息
-v = 显示wpa_cli的版本信息
-B = 作为一个daemon在后台运行
-p = 指定控制socket的路径:/data/misc/wifi/sockets/
-i = 指定接口名,一般均为wlan0
关于socket路径和接口名的信息,请看下图:

WLAN-socket.png


(1)p2p0和wlan0是WPAS端创建的socket接口;
(2)wpa_ctrl_1050-2/3是在开启wifi过程中由Framework层客户端程序创建出的socket接口;
(3)其中一个用于向WPAS发送命令并接受WPAS的回复,另一个用于监听WPAS返回上来的unsolicited event。

wpa_cli的常用命令command

CommandDescriptionstatus显示WPA/EAPOL/EAP的当前状态ping心跳检测命令,wpa_cli通过它检测WPAS是否正常工作;WPAS收到“PING”后,会回复“PONG”mid显示设备MIB信息(dot1x, dot11)scan请求一次SCAN操作,仅仅扫描,并不显示扫描结果scan_results显示最新的SCAN结果scan_interval <value>设置scan间隔,单位为秒log_level <level>设置WPAS的log级别,常设为DEBUG即可get_capability <eap/pairwise/group/key_mgmt/channels>获取性能get/set country CN/JP/US获取/设置国家码sava_config保存当前的配置add_network添加一个新的网络,会返回该新无线网络的id(从0开始)remove_network <id>移除一个网络enable_network <id>使能某个无线网络,最终WPAS将通过一系列操作加入该无线网络disable_network <id>禁止一个网络get_network <id> <variable>获取网络的某一变量值set_network <id> <variable> <value>设置指定无线网络的信息identity <id> <identity>配置某一网络的identityPassword <id> <password>配置某一网络的passwordtermimate终止WPASquit(简写q)退出wpa_cli

wpa_cli的工作模式

1. 交互模式:
先启动wpa_cli,进入交互模式,在提示符“>”后输入命令;
2. 命令行模式:
启动wpa_cli的时候,同时输入命令作为wpa_cli的参数。


这两种模式下的命令集是相同的;
不同之处在于,在交互模式下,可以访问到unsolicited messages(不请自来的消息),
例如WPAS返回的事件,用户名/密码请求(CTRL-REQ-IDENTITY/PASSWORD-<id>:<text>)等。
注:id--->当前网络的唯一标示符;text--->关于该请求的描述。

wpa_cli交互模式实例

Eg wpa cli.png

Client端API介绍

1. 创建与WPAS通信的控制对象(即socket文件)
struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path);
API的实现:socket()--->bind()
2. 销毁控制对象
void wpa_ctrl_close(struct wpa_ctrl *ctrl);
API的实现:close()
3. 发送命令(command)给WPAS并接收WPAS的回复(reply)
int wpa_ctrl_request(……);
API的实现:send()--->select()--->recv()
4. 打开控制对象的通知事件监听功能(即:将control socket注册为monitor socket)
int wpa_ctrl_attach(struct wpa_ctrl *ctrl);
5. 关闭控制对象的通知事件监听功能(即:将monitor socket还原为control socket)
int wpa_ctrl_detach(struct wpa_ctrl *ctrl);
6. 接收WPAS的unsolicited event
int wpa_ctrl_recv(struct wpa_crtl *ctrl, char *reply, size_t reply_len);
API的实现:recv()

Server端API介绍

1. 接收Client端发送的命令,进行处理,并进行回复
void wpa_supplicant_ctrl_iface_receive(int sock, void *eloop_ctx, void *sock_ctx);
API的实现:recvfrom()--->wpa_supplicant_ctrl_iface_process()--->sendto()
2. 向Client端发送unsolicited event
void wpa_supplicant_ctrl_iface_send(……);
API实现:sendmsg()

0 0
原创粉丝点击