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   设置调试等级

3. 如果在windows下使用网卡连接Linuxd AP 

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

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等配置选项;

wps跟mesh_ide