WSC IE并不屬于802.11規范所定義的IE,而是屬于Vendor定義的IE。根據802.11規范,Vendor定義的IE有著如圖6-8所示的組成結構:
:-: 
圖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所示。
:-: 
圖6-9 WSC IE實例
:-: 
圖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所示。
:-: 
圖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兩個屬性的內容。
:-: 
圖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屬性。
:-: 
圖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所示屬性。
:-: 
圖6-14 Primary Device Type屬性
:-: 
圖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所示。
:-: 
圖6-16 Device Password ID屬性
:-: 
圖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 參考資料說明
- 附錄