WSC IE并不属于802.11规范所定义的IE,而是属于Vendor定义的IE。根据802.11规范,Vendor定义的IE有着如图6-8所示的组成结构:
:-: ![](http://img.blog.csdn.net/20140316202425906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSW5ub3N0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图6-8 Vendor IE的结构
根据图6-8所示的结构,WSC IE对应的设置如下:
- Element ID取值为221。802.11规范中,该值意为“Vendor Specific”。
- Length为OUI及Data的长度。
- OUI取值为0x00-50-F2-04。其中00-50-F2代表Mircrosoft公司的OUI,04代表WPS。
- WSC IE中,Data域的组织结构为一个或多个Attribute(属性)。Attribute的格式为TLV,即Type(长度为2个字节)、Length(长度为2个字节,代表后面Value的长度),Value(最大长度为0xFFFF字节)。
图6-9所示为笔者截获的WSC IE。由上文可知,WSC IE的核心是其携带的Attribute。WSC规范定义了多个Attribute,而了解这些Attribute的内容及作用是学习WSC的必经之路。下面将介绍WSC中一些重要的Attribute。
>[info] **提示**:Attribute不仅被WSC IE使用,还被后文介绍的EAP-WSC包使用
**1、Version和Vendor Extension属性**
Version属性表达了发送端使用的WSC版本信息。Version属性对应的内容如图6-10所示。
:-: ![](http://img.blog.csdn.net/20140316202440578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSW5ub3N0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图6-9 WSC IE实例
:-: ![](https://box.kancloud.cn/5c090a55a1a65625c72f63f7253304f9_635x146.jpg)
图6-10 Version属性的内容
由图6-10可知,Version属性的Type字段取值为0x104a,Length字段长度为1字节。Version属性已经作废(Deprecated),但为了保持兼容性,规范要求WSC IE必须包含该属性,并且其Value字段需设为0x10。取代Version属性的是Version2属性,Version2属性并不能单独存在,而是作为Vendor Extension的子属性被包含在WSC IE中。Vendor Extension的示例如图6-11所示。
:-: ![](https://box.kancloud.cn/1c51656dbdfa16e7ca90e5d268d52b4e_946x441.jpg)
图6-11 Vendor Extension属性
Vendor Extension头部包含三个部分,分别是Type(值为0x1049)、Length(此处的值为9)、Vendor ID[^①](十进制值为14122,十六进制值为0x00372a)。
Vendor Extension可包含多个子属性,图6-11的Vendor Extension包含了Version2和Request toEnroll两个子属性。"Vendor Extension:00372a000120030101"一行代表的是Vendor Extension的Value。它是后面Vendor ID、Version2和Request to Enroll的所有内容。
Request to Enroll子属性代表Enrollee希望开展后续的EAP-WSC流程。
**2、Request Type和Response Type属性**
图6-12所示为Request Type和Response Type两个属性的内容。
:-: ![](https://box.kancloud.cn/c314eac08aea549af330a0255b4f4187_1087x139.jpg)
图6-12 Request Type和Response Type属性
图6-12左图所示为Request Type,右图所示为Response Type。
* Request Type属性必须包含于Probe/Association Request帧中,代表STA作为Enrollee想要发起的动作。该属性一般取值0x01(含义为Enrollee,open 802.1X),代表该设备是Enrollee,并且想要开展WSC后续流程。它还有一个取值为0x00(含义为Enrollee,Info only),代表STA只是想搜索周围支持WSC的AP,而暂时还不想加入某个网络。
* Response Type属性代表发送者扮演的角色。对于AP来说,其取值为0x03(含义为AP),对于Registrar来说,其取值为0x02,对于Enrollee来说,其取值可为0x00(Enrollee,Info only)和0x01(Enrollee,open 802.1X)。Standalone AP也属于AP,故图6-12右图的Response Type取值为0x03。
**3、Configuration Methods和Primary Device Type属性**
Configuration Methods属性用于表达Enrollee或Registrar支持的WSC配置方法。前文提到的PIN和PBC就属于WSC配置方法。考虑到支持Wi-Fi的设备类型很多,例如打印机、相机等,故WSC规范定义的WSC配置方法较多。图6-13所示为Configuration Methods属性。
:-: ![](https://box.kancloud.cn/ab11c5bfb61a05c11341494c662c3fbf_689x433.jpg)
图6-13 Config Methods属性
* Type字段取值为0x1008,Length字段取值为2,代表Value的内容长度为2字节。
* Configuration Method的Value长度为2字节,共16位。每一位都代表Enrollee或Registrar支持的WSC配置方法。
图6-13所示为Galaxy Note 2所支持的Method,它支持动态PIN码(即STA能动态生成随机PIN码,由Display位表达。静态PIN码由Label位表示)。
>[info] 注意 Display还需细分为Physical Display或Virtual Display。二者区别是Physical Display表示PIN码能直接显示在设备自带的屏幕上,而Virtual Display只能通过其他方式来查看(由于绝大多数无线路由器都没有屏幕,所以用一般情况下,用户只能在浏览器中通过设备页面来查看)PIN码。Keypad表示可在设备中输入PIN码。另外,是否支持Push Button由Push Button位表达。同PIN码一样,它也分Physical Push Button和Virtual Push Button。由于Galaxy Note 2硬件上并没有专门的按钮(它只不过是在软件中实现了一个按钮用来触发Push Button,读者可参考图6-2中左图的“WPS推送按钮”项),所以这里的设置为支持Virtual Push Button。
Primary Device Type属性代表设备的主类型。在Discovery Phase阶段,交互的一方可指定要搜索的设备类型(需设置Requested Device Type属性,该属性的结构和取值与Primary DeviceType一样)。这样,只有那些Primary Device Type和目标设备类型匹配的一方才会进行响应。图6-14为Galaxy Note 2的Primary Device Type属性。
WSC规范中,Primary Device Type的结构如图6-15所示属性。
:-: ![](https://box.kancloud.cn/10f83082ad9b83e696643e498ace197c_979x245.jpg)
图6-14 Primary Device Type属性
:-: ![](https://box.kancloud.cn/145e112f3cb1f08cbd2856fd9946ebfb_968x311.jpg)
图6-15 Primary Device Type的组成
结合图6-14和图6-15可知。
* Type(即图6-15中的Attribute ID)字段的值为0x1054,Length字段的值为4字节。
* Category ID为WSC规范中定义的设备类型。Galaxy Note 2属于Telephone设备,取值为0x000a。
* OUI默认为WFA的OUI编号,取值为0x00-50-f2-04。注意,图6-14并未单独列举出OUI字段的取值。
* WSC还划分了Sub Category,Galaxy Note 2取值为0x0005,代表Smartphone-dual mode类设备。dual mode表示设备支持两个Wi-Fi频段(注意,规范并未说明dual mode的具体含义。此处的解释为笔者根据规范内容推断而来)。
>[info] 提示 对AP来说,其Category取值为"Network Infrastructure",Sub Category取值为"AP"。规范还定义了一个名为Secondary Device Type List的属性,该属性包含了设备支持的除主设备类型外的设备类型。具体的设备类型取值和Primary Device Type一样。Discovery Phase阶段中,Secondary Device Type List也可作为搜索匹配条件。
**4、Device Password ID和RF Bands属性**
Device Password ID属性用于标示设备Password的类型,默认值是PIN(值为0x0000),代表Enrollee使用PIN码(静态或动态PIN码都可以)。如图6-16所示。
>[info] 提示 Device Password ID其他可取值包括0x0001(User-Specified)、0x0002(Machine-Specified)、0x0003(Rekey)、0x0004(PushButton)等。
另一个比较重要的属性是RF Bands,如图6-17所示。
:-: ![](https://box.kancloud.cn/430907dc6657152b38e234a40f1ff498_693x126.jpg)
图6-16 Device Password ID属性
:-: ![](https://box.kancloud.cn/70f9bbd2441986a9505987472445e550_536x123.jpg)
图6-17 RF Bands属性
RF Bands代表设备所支持的无线频率。图6-17所示为Galaxy Note 2的RF Bands取值,其Wi-Fi芯片支持2.4GHz和5GHz两个频率。
>[info] 提示 WSC规范定义的Attribute非常多,由于篇幅原因,本书不一一介绍。如有需要,可根据参考资料[4]来了解相关Attribute的信息。
根据前文所述,支持WSC的设备必须在一些802.11管理帧中设置WSC IE,而不同的管理帧中WSC IE的内容也不尽相同。
[^①]:该值由WFA注册,可在IANA官方网站查询(http://www.iana.org/assignments/enterprisenumbers/enterprise-numbers )。
- 前言
- 第1章 准备工作
- 1.1 Android系统架构
- 1.2 工具使用
- 1.2.1 Source Insight的使用
- 1.2.2 Eclipse的使用
- 1.2.3 BusyBox的使用
- 1.3 本书资源下载说明
- 第2章 深入理解Netd
- 2.1 概述
- 2.2 Netd工作流程
- 2.2.1 main函数分析
- 2.2.2 NetlinkManager分析
- 2.2.3 CommandListener分析
- 2.2.4 DnsProxyListener分析
- 2.2.5 MDnsSdListener分析
- 2.3 CommandListener中的命令
- 2.3.1 iptables、tc和ip命令
- 2.3.2 CommandListener构造函数和测试工具ndc
- 2.3.3 InterfaceCmd命令
- 2.3.4 IpFwd和FirewallCmd命令
- 2.3.5 ListTtysCmd和PppdCmd命令
- 2.3.6 BandwidthControlCmd和IdletimerControlCmd命令
- 2.3.7 NatCmd命令
- 2.3.8 TetherCmd和SoftapCmd命令
- 2.3.9 ResolverCmd命令
- 2.4 NetworkManagementService介绍
- 2.4.1 create函数详解
- 2.4.2 systemReady函数详解
- 2.5 本章总结和参考资料说明
- 2.5.1 本章总结
- 2.5.2 参考资料说明
- 第3章 Wi-Fi基础知识
- 3.1 概述
- 3.2 无线电频谱和802.11协议的发展历程
- 3.2.1 无线电频谱知识
- 3.2.2 IEEE 802.11发展历程
- 3.3 802.11无线网络技术
- 3.3.1 OSI基本参考模型及相关基本概念
- 3.3.2 802.11知识点导读
- 3.3.3 802.11组件
- 3.3.4 802.11 Service介绍
- 3.3.5 802.11 MAC服务和帧
- 3.3.6 802.11 MAC管理实体
- 3.3.7 无线网络安全技术知识点
- 3.4 Linux Wi-Fi编程API介绍
- 3.4.1 Linux Wireless Extensions介绍
- 3.4.2 nl80211介绍
- 3.5 本章总结和参考资料说明
- 3.5.1 本章总结
- 3.5.2 参考资料说明
- 第4章 深入理解wpa_supplicant
- 4.1 概述
- 4.2 初识wpa_supplicant
- 4.2.1 wpa_supplicant架构
- 4.2.2 wpa_supplicant编译配置
- 4.2.3 wpa_supplicant命令和控制API
- 4.2.4 git的使用
- 4.3 wpa_supplicant初始化流程
- 4.3.1 main函数分析
- 4.3.2 wpa_supplicant_init函数分析
- 4.3.3 wpa_supplicant_add_iface函数分析
- 4.3.4 wpa_supplicant_init_iface函数分析
- 4.4 EAP和EAPOL模块
- 4.4.1 EAP模块分析
- 4.4.2 EAPOL模块分析
- 4.5 wpa_supplicant连接无线网络分析
- 4.5.1 ADD_NETWORK命令处理
- 4.5.2 SET_NETWORK命令处理
- 4.5.3 ENABLE_NETWORK命令处理
- 4.6 本章总结和参考资料说明
- 4.6.1 本章总结
- 4.6.2 参考资料说明
- 第5章 深入理解WifiService
- 5.1 概述
- 5.2 WifiService的创建及初始化
- 5.2.1 HSM和AsyncChannel介绍
- 5.2.2 WifiService构造函数分析
- 5.2.3 WifiStateMachine介绍
- 5.3 加入无线网络分析
- 5.3.1 Settings操作Wi-Fi分析
- 5.3.2 WifiService操作Wi-Fi分析
- 5.4 WifiWatchdogStateMachine介绍
- 5.5 Captive Portal Check介绍
- 5.6 本章总结和参考资料说明
- 5.6.1 本章总结
- 5.6.2 参考资料说明
- 第6章 深入理解Wi-Fi Simple Configuration
- 6.1 概述
- 6.2 WSC基础知识
- 6.2.1 WSC应用场景
- 6.2.2 WSC核心组件及接口
- 6.3 Registration Protocol详解
- 6.3.1 WSC IE和Attribute介绍
- 6.3.2 802.11管理帧WSC IE设置
- 6.3.3 EAP-WSC介绍
- 6.4 WSC代码分析
- 6.4.1 Settings中的WSC处理
- 6.4.2 WifiStateMachine的处理
- 6.4.3 wpa_supplicant中的WSC处理
- 6.4.4 EAP-WSC处理流程分析
- 6.5 本章总结和参考资料说明
- 6.5.1 本章总结
- 6.5.2 参考资料说明
- 第7章 深入理解Wi-Fi P2P
- 7.1 概述
- 7.2 P2P基础知识
- 7.2.1 P2P架构
- 7.2.2 P2P Discovery技术
- 7.2.3 P2P工作流程
- 7.3 WifiP2pSettings和WifiP2pService介绍
- 7.3.1 WifiP2pSettings工作流程
- 7.3.2 WifiP2pService工作流程
- 7.4 wpa_supplicant中的P2P
- 7.4.1 P2P模块初始化
- 7.4.2 P2P Device Discovery流程分析
- 7.4.3 Provision Discovery流程分析
- 7.4.4 GO Negotiation流程分析
- 7.5 本章总结和参考资料说明
- 7.5.1 本章总结
- 7.5.2 参考资料说明
- 第8章 深入理解NFC
- 8.1 概述
- 8.2 NFC基础知识
- 8.2.1 NFC概述
- 8.2.2 NFC R/W运行模式
- 8.2.3 NFC P2P运行模式
- 8.2.4 NFC CE运行模式
- 8.2.5 NCI原理
- 8.2.6 NFC相关规范
- 8.3 Android中的NFC
- 8.3.1 NFC应用示例
- 8.3.2 NFC系统模块
- 8.4 NFC HAL层讨论
- 8.5 本章总结和参考资料说明
- 8.5.1 本章总结
- 8.5.2 参考资料说明
- 第9章 深入理解GPS
- 9.1 概述
- 9.2 GPS基础知识
- 9.2.1 卫星导航基本原理
- 9.2.2 GPS系统组成及原理
- 9.2.3 OMA-SUPL协议
- 9.3 Android中的位置管理
- 9.3.1 LocationManager架构
- 9.3.2 LocationManager应用示例
- 9.3.3 LocationManager系统模块
- 9.4 本章总结和参考资料说明
- 9.4.1 本章总结
- 9.4.2 参考资料说明
- 附录