WPS功能调试
WPS功能调试
在SDK中添加WiFi模块后发现WPS不能正常使用,于是又有了调试WPS的任务
WPS介绍
WPS(Wi-Fi Protected Setup)是Wi-Fi保护设置的英文缩写。WPS是由Wi-Fi联盟组织实施的认证项目,主要致力于简化无线局域网安装及安全性能的配置工作。这是一个2007年年初才发布的认证,目的是让消费者可以通过更简单的方式来设置无线网络设备,并且保证有一定的安全性。
在传统方式下,用户新建一个无线网络时,必须在接入点手动设置网络名(SSID)和安全密钥,然后在客户端验证密钥以阻止“不速之客”的闯入。Wi-Fi Protected Setup能帮助用户自动设置网络名(SSID)、配置最高级别的WPA2安全密钥,具备这一功能的无线产品往往在机身上设计一个功能键,称为WPS按钮,用户只需轻轻按下该按钮或输入PIN码,再经过两三步简单操作即可完成无线加密设置,同时在客户端和路由器之间建立一个安全的连接。
WPS并不是一项新增的安全性能,只是使现有的安全技术更容易配置。对于一般用户,WPS提供了一个相当简便的加密方法。通过该功能,不仅可将都具有WPS功能的Wi-Fi设备和无线路由器进行快速互联,还会随机产生一个8位数字的字符串作为个人识别号码(PIN)进行加密操作。省去了客户端需要连入无线网络时,必须手动添加网络名称(SSID)及输入冗长的无线加密密码的繁琐过程。
遇到的问题
经过自己的摸索,发现WPS需要运行wscd,在项目中加入wscd进行编译,发现一些类型不匹配的错误,基本都是有符号和无符号指针的不匹配,简单的进行强转修改,使其能够编译通过并运行
运行失败,由于系统是只读系统,默认的路径不能生成文件,所以修改目录,定义了宏,并将TOP_CONFIG_DIR修改为我们定义的宏WIFI_WPS_TMP_DIR,这两个宏的路径如下:
1
2#define TOP_CONFIG_DIR "/etc"
#define WIFI_WPS_TMP_DIR "/tmp/wps"查到启动命令为:
1
$wscd -start -c /tmp/wps/wsc-wlan0.conf -w wlan0 -fi /tmp/wps/wscd-wlan0.fifo -br br-lan -upnp 0 -daemon
通过命令可以看到需要一份配置文件,指定interface,指定管道路径,建立网桥
配置文件最后再说,interface就是WiFi对应的,管道的作用是什么呢,经过一段时间的资料查找,代码查看,发现除了wscd还需要一个iwcontrol的进程,iwcontrol的启动命令如下:
1
iwcontrol wlan0 wlan1
启动wscd,启动iwcontrol后,发送启动wps的命令后,wscd直接退出,原因是接收到用户定义的信号SIGUSR2。
我去查看wsc的源码,发现有捕获信号的操作:
1
2signal(SIGUSR2, sigHandler_user);
signal(SIGTSTP, sigHandler_user);说明代码没有走到这个地方就阻塞了,向上查看代码,找到了阻塞的位置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
if (stat(pCtx->fifo_name, &status) == 0)
unlink(pCtx->fifo_name);
if (mkfifo(pCtx->fifo_name, FIFO_MODE) < 0) {
WSC_DEBUG("mkfifo() error1!\n");
return -1;
}
/* Open fifo, indication event queue of wlan driver */
pCtx->fifo = open(pCtx->fifo_name, O_RDONLY , 0);
//WSC_DEBUG("mkfifo(%s)\n",pCtx->fifo_name);
if (pCtx->fifo < 0) {
DEBUG_ERR("open fifo(%s) fail!\n",pCtx->fifo_name);
return -1;
}
}打开管道后,会一直阻塞,等待另一个进程的写入,所以说明iwcontrol没有打开这个管道,查看其源码发现,管道的路径是写死的在/etc目录下,和wscd不匹配,所以修改路径解决此问题
以上所有问题解决后,WPS并不能连接成功,经过排查发现还需建立一条路由:
1
system("route add -net 239.255.255.250 netmask 255.255.255.255 dev br-lan");
WSCD配置文件
默认配置文件
WSCD的默认配置文件参数,手册里都有介绍,其中uuid需要将后12位换成mac地址,其他的是否修改无伤大雅,如果要修改可按照手册修改
生成配置文件
WSCD使用的配置文件是由两部分组成,一部分为WIFI的WPS配置,一部分即使默认配置,WPS配置如下:
1 |
|
最终配置要根据WiFi的配置生成,并将其与默认配置合并,以2.4g为例生成配置文件的代码如下:
1 |
|