多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
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 )。