1. 阐述
前段时间,使用两块雷凌RT5372无线网卡,在Linux下搭建AP和STA,利用WPS(WSC)方式进行连接。调试过程也没那么复杂,在此也简单做个小结;
WPS或WSC其实是指相同的东西,WPS的概念就不累赘讲解了,网上很多资料有阐述;如,一键加密WPS使用指南 磊科无线路由器方式进行连接,深入理解Android:Wi-Fi,NFC和GPS,WPS以及它的两种方式PIN与PBC的理解等等。
接下来就是驱动了,在此之前,由于STA驱动我拿到的是一份不支持WPS功能的驱动,折腾了一小会才发现驱动不对(这里指软件,但硬件必须支持WPS),最后才通过网络下载到适合的驱动,就我目前所见到的,雷凌系列的网卡驱动且支持WPS的驱动的一般编译出来了都有三个.ko文件的,而且配置文件config.mk有配置项,如果没有标明该驱动不支持WPS模式;
# Support WSC function
HAS_WSC=y
HAS_WSC_V2=y
HAS_WSC_LED=n
HAS_IWSC_SUPPORT=n
这里给出连个驱动的下载链接:2011_0517_RT5370_RT5372_RT5390U_Linux_AP_V2.6.0.0_DPA.tar.bz2,DPA_RT5572_LinuxSTA_2.6.1.4_20121211.tar.bz2
手册 :MTK_Wi-Fi_STA_Software_Programming_Guide_v1.2,MTK_Wi-Fi_SoftAP_Software_Programming_Guide_v2.4
编译可以参考网友embed_huang 的 一键加密:WPS(Wi-Fi Protected Setup,Wi-Fi保护设置)
2. 指令使用:AP和STA指令设置流程(指令该大小的大写,该小写的小写)
------------------------- AP ------------------------------
iwpriv ra0 set Debug=3 设置调试等级
[Unconfigured AP] <- EAP/UPnP -> [Registrar]
1. PIN
(1) on AP side
iwpriv ra0 set WscConfMode=7
iwpriv ra0 set WscConfStatus=1 ;; AP is un-configured
iwpriv ra0 set WscMode=1
iwpriv ra0 set WscGetConf=1
iwpriv ra0 set WscGenPinCode //随机创建PIN码
iwpriv ra0 stat //查看AP's PIN码 要使用dmesg指令才看得到
2. PBC
(1) on AP side
iwpriv ra0 set WscConfMode=7
iwpriv ra0 set WscConfStatus=1 ;; AP is un-configured
iwpriv ra0 set WscMode=2
iwpriv ra0 set WscGetConf=1
[AP+Registrar] <- EAP -> [Client]
1. PIN
(1) on AP side
iwpriv ra0 set WscConfMode=7
iwpriv ra0 set WscPinCode=XXXXXXXX (enter the enrollee's PIN, the PIN
from WPS client)
iwpriv ra0 set WscMode=1
iwpriv ra0 set WscGetConf=1.
2. PBC
(1) on AP side
iwpriv ra0 set WscConfMode=7
iwpriv ra0 set WscMode=2
iwpriv ra0 set WscGetConf=1.
------------------------- STA ------------------------------
iwpriv ra0 debug 3 设置调试等级
1. Enrollee Mode
1.1) PIN mode:
(ii)[RT2860 Linux WPS STA]
iwpriv ra0 wsc_conf_mode 1;; Enrollee
iwpriv ra0 wsc_mode 1;; PIN
iwpriv ra0 wsc_ap_band 0 (or 1);; 0: prefer 2.4G, 1: prefer 5G
iwpriv ra0 wsc_ssid "AP's SSID"
iwpriv ra0 wsc_start
iwpriv ra0 wsc_gen_pincode //随机创建PIN码
iwpriv ra0 stat //查看STA's PIN码
1.2) PBC mode:
{ii)[RT2860 Linux WPS STA]
iwpriv ra0 wsc_conf_mode 1;; Enrollee
iwpriv ra0 wsc_mode 2;; PBC
iwpriv ra0 wsc_ap_band 0 (or 1);; 0: prefer 2.4G, 1: prefer 5G
iwpriv ra0 wsc_start
2. Registrar Mode
2.1) PIN mode:
iwpriv ra0 wsc_conf_mode 2;; Registrar
iwpriv ra0 wsc_mode 1;; PIN
iwpriv ra0 wsc_pin xxxxxxxx;; AP's PIN Code
iwpriv ra0 wsc_ap_band 0 (or 1);; 0: prefer 2.4G, 1: prefer 5G
iwpriv ra0 wsc_ssid "AP's SSID"
iwpriv ra0 wsc_start
2.2) PBC mode:
(ii)[RT2860 Linux WPS STA]
iwpriv ra0 wsc_conf_mode 2;; Registrar
iwpriv ra0 wsc_mode 2;; PBC
iwpriv ra0 wsc_ap_band 0 (or 1);; 0: prefer 2.4, 1: prefer 5G
iwpriv ra0 wsc_start
3. 如果在windows下使用网卡连接Linuxd AP
Linux平台: Ubuntu 12.04.2 (GNU/Linux 3.5.0-23-generic i686)
硬件: USB无线网卡(雷凌RT5372)
Windows平台: Win7
硬件: USB无线网卡(瑞昱 RTL8192CU)
设置
iwpriv ra0 set WscConfMode=7或5
iwpriv ra0 set WscConfStatus=2 ;; AP is configured
Windows下使用USB无线网卡连接AP时会随机出现“根据路由器上的标签键输入8位PIN”或“通过按路由器上的按钮也可以连接”的提示,如图片WPS-for-PC-link.jpg所示;
在参考STA指令设置便可实现Windows上使用WPS连接AP;
WPS模式:通过PIN码或PBC方式连接,从而获取AP的秘钥,因此用户无需手动输入秘钥;STA保存了AP的秘钥,以后的连接跟普通方式一样通过秘钥验证;
如果秘钥被修改了,则需要通过WPS模式重新再连接;
由这两天调试可知,WPS模式只是屏蔽了用户手动输入秘钥的环节,通过内部机制获取到AP的秘钥和配置其他信息;获取到的配置依旧写入/etc/Wireless/RT2870STA/RT2870STA.dat文件中,如AuthMode,EncrypType,WPAPSK等配置选项;