1. 程式人生 > >802.11 MAC層幀解析

802.11 MAC層幀解析

    注2:本文屬於個人理解,存在錯誤望見諒和指正。

1.MAC幀格式

對應的資料結構如下:

  1. typedefstruct _rtw_ieee80211_hdr_qos {
  2. __le16 frame_ctl;
  3. __le16 duration_id;
  4. u8 addr1[ETH_ALEN];
  5. u8 addr2[ETH_ALEN];
  6. u8 addr3[ETH_ALEN];
  7. u16 seq_ctl;
  8. u8 addr4[ETH_ALEN];
  9. } rtw_ieee80211_hdr_qos,*prtw_ieee80211_hdr_qos;

1.1 地址格式  

    addr1:接收地址(所有包都包含它)

    addr2:傳輸地址(除ACK和CTS包外的其他包都包含它)

    addr3:只用於管理包和資料包。

    addr4:無線分佈系統模式下,FROM DS和TO DS都被置位時使用。

    下圖中,佔兩個位元組的Frame control ,其To DS和From Ds決定了這四個地址的使用。

    Frame control對應的地址如下: (Little ENDIAN)

  1. typedefstruct _frame_contrl{
  2. unsignedchar version:2;
  3. unsignedchar type:2;//00 管理幀 01控制幀 10資料幀 11保留
  4. unsigned
    char subtype:4;//0000 0001 Association request/response;   0010 0011 reassociation request/response
  5. //0100 0101 probe requset/response;         0110-0111 reserved
  6. //1000 Beacon; 1001 Announcement traffic indication message(ATIM)
  7. //1010 Disassociation                         1011 Authentication
  8. //1100 Deauthentication 1101-1111 Reserved
  9. //unsigned char ToDS:1;
  10. unsignedcharFromDS:2;/* 來自DS*/
  11. unsignedcharMoreFrag:1;/*更多分段*/
  12. unsignedcharRetry:1;/*重傳*/
  13. unsignedcharPwrMgt:1;/*電源管理*/
  14. unsignedcharMoreData:1;/*更多資料*/
  15. unsignedchar WEP:1;/*受保護幀*/
  16. unsignedcharRsvd:1;/*順序*/
  17. }frame_contrl,*pfram_contrl;

    地址對應表如下:

    DS是分散式系統的簡稱,我們用它以區分不同型別幀中關於地址的解析方式。

        To DS=0,From DS=0:表示Station之間的AD Hoc類似的通訊,或者控制偵、管理偵。

        To DS=0,From DS=1:Station接收的偵。

        To DS=1,From DS = 0:Station傳送的偵。

        To DS=1,From DS = 1:無線橋接器上的資料偵。

     各地址的解釋:

        SRC:源地址(SA),和乙太網中的一樣,就是發幀的最初地址,在乙太網和wifi中幀格式轉換的時候,互相可以直接複製。

        DST:目的地址(DA),和乙太網中的一樣,就是最終接受資料幀的地址,在乙太網和wifi中幀格式轉換的時候,互相可以直接複製。

        TX:也就是Transmiter(TA),表示無線網路中目前實際傳送幀者的地址(可能是最初發幀的人,也可能是轉發時候的路由)。

        RX:也就是Receiver(RA),表示無線網路中,目前實際接收幀者的地址(可能是最終的接收者,也可能是接收幀以便轉發給接收者的ap)。

    注:無線網路中的Station想要通訊,必須經過AP來進行轉發。其實,TxRx是無線網路中的發和收,也就是Radio;而SrcDst是真正的傳送源和接收者

2 幀型別

    幀型別由frame control的type兩位決定,目前有三種類型的幀:

    00,管理幀。IEEE80211_TYPE_MGMT 用於執行管理操作,如關聯、身份驗證,掃描等。

    01,控制幀。IEEE80211_TYPE_CTL 通常與資料包相關。如:PS-poll包用於從AP緩衝區取回資料包;另一個例子,STA若想資料傳輸,首先會發送RTS的控制資料包,如果介質空閒,目標客戶端將發回一個名為允許傳送(CTS)的控制資料包。

    10,資料幀。IEEE80211_TYPE_DATA 原始資料包。注:空資料包是特殊的資料幀,其用於電源管理。

    11,保留

2.1 SubType

2.1.1 管理幀 type 00

    下表為管理幀的subType對應的型別(即type為00時,subType的取值)

Type SubType FrameType
00 0000
Association request (連線請求)
00
0001 Association response (連線響應)
00
0010 Reassociation request(重連線請求)
00
0011 Reassociation response(重連線聯響應)
00
0100 Probe request(探測請求)
00
0101 Probe response(探測響應)
00
1000
Beacon(信標,被動掃描時AP 發出,notify)
00
1001 ATIM(通知傳輸指示訊息)
00
1010 Disassociation(解除連線,notify)
00
1011 Authentication(身份驗證)
00
1100 Deauthentication(解除認證,notify)
00
1101~1111
Reserved(保留,未使用)

2.1.1.1(Beacon(信標)幀)  subtype 1000

    抓包顯示的結果:

    由於Beacon是廣播包,因此DA為FF:FF:FF:FF:FF:FF。

    作用:向STA廣播AP的存在。也就是我們平時能夠搜到AP的原因,其包含了AP的相關資訊。

2.1.1.2 (Probe Request(探測請求)幀) subtype 0100

    抓包顯示的結果:

    作用:STA廣播發出,與AP建立關聯的必然步驟,後面會具體說明。

2.1.1.3 (Probe Response(探測響應)幀) subtype 0101


    作用:STA請求探測幀後,AP的相對應的迴應幀。

2.1.1.4 (ATIM幀)  subtype  1001

2.1.1.5 (Disassociation(解除關聯)與Deauthentication(解除認證)幀) subtype 1010

2.1.1.6 (Association Request(關聯請求)幀) subtype 0000

2.1.1.7 (Reassociation Request(重新關聯請求)幀) subtype 0010

                                                

2.1.1.8 (Authentication(身份認證)幀) subtype 1011

2.1.2 資料幀 type 10

Type Subtype Frametype
10 0000 Data(資料)
10
0001 Data+CF-ACK
10
0010 Data+CF-Poll
10
0011 Data+CF-ACK+CF-Poll
10
0100 Null data(無資料:未傳送資料)
10
0101 CF-ACK(未傳送資料)
10
0110 CF-Poll(未傳送資料)
10
0111 Data+CF-ACK+CF-Poll
10
1000 Qos Data
10
1001 Qos Data + CF-ACK
10
1010 Qos Data + CF-Poll
10
1011 Qos Data + CF-ACK+ CF-Poll
10
1100 QoS Null(未傳送資料)
10
1101 QoS CF-ACK(未傳送資料)
10
1110 QoS CF-Poll(未傳送資料)
10
1111 QoS CF-ACK+ CF-Poll(未傳送資料)

2.1.2.1 IBSS subtype  (0000 Data,0100NULL)

2.1.2.2  From AP  subtype如圖所示

2.1.2.3 To AP 

2.1.2.4 WDS幀 subtype null

2.1.3 控制幀 type 01

    主要用於資料傳輸前的控制,相關過程請看4.0 RTS/CTS。

Type Subtype Frametype
01 1010 Power Save(PS)- Poll(省電-輪詢)
01
1011 RTS(請求傳送,即: Request To Send ,預約通道,幀長20位元組)
01
1100 CTS(清除傳送,即:Clear To Send ,同意預約,幀長14位元組)
01
1101 ACK(確認)
01
1110 CF-End(無競爭週期結束)
01
1111 CF-End(無競爭週期結束)+CF-ACK(無競爭週期確認)

2.1.3.1 RTS幀 subtype 1011

2.1.3.2 CTS幀  subtype 1100

2.1.3.3 ACK幀 subtype 1101

2.1.3.4 PS-Poll幀  subtype  1010


    作用:當sta從省電模式中甦醒,便傳送一個PS-poll給基站。

3. Radiotap Header(monitor資訊)

    在monitor模式時,核心在MAC幀前面提供額外的資訊。稱為Radiotap Header,其包含的資訊有MAC時間戳,SSI訊號強度,頻道頻率等。

    對應的資料結構如下:

  1. typedefstruct _ieee80211_radiotap_header {
  2. u8 it_version;/* Version 0. Only increases
  3.  * for drastic changes,
  4.  * introduction of compatible
  5.  * new fields does not count.
  6.  */
  7. u8 it_pad;
  8. __le16 it_len;/* length of the whole
  9.  * header in bytes, including
  10.  * it_version, it_pad,
  11.  * it_len, and data fields.
  12.  */
  13. __le32 it_present;/* A bitmap telling which
  14.  * fields are present. Set bit 31
  15.  * (0x80000000) to extend the
  16.  * bitmap by another 32 bits.
  17.  * Additional extensions are made
  18.  * by setting bit 31.
  19.  */
  20. }ieee80211_radiotap_header,*pieee80211_radiotap_header;

    這裡的it_len表明了radiotap_header的長度,按上面抓到的包,這裡的值為26。

    因此,在monitor模式得到的RAW包,我們首先要偏移it_len個位元組,以此得到MAC頭

4. RTS/CTS 幀 (資料傳送原子性)

    這兩個幀出現的原因是 無線收發器(STA)通常無法同時收發資料。使用這兩個幀可以讓STA處於收或髮狀態。

    這樣比較好理解,正是因為如此,當STA開始傳送RTS,說明STA發資料;AP開始傳送RTS,說明RTS接收資料。

    當其他STA收到RTS時,將延後資料包的傳送。而具體延遲多久,由正在傳輸的MAC頭中的持續時間決定(Duration ID)。如:

    RTS(Request-to-Send):請求傳送資料

    CTS(Clear-to-Send):清空傳送區域

    兩個幀的過程如圖:

    ①為 STA  ②為AP 

    抓的兩個包來看下,下面是STA作為請求方

    下面是STA作為接收方:

   上圖的223.252.199.6(00:36:76:54:b4:a2)是ap,172.21.11.2(a4:d1:d2:60:bb:0d)是STA,其Qos資料資料如下:

    RTS和CTS幀會延長幀傳輸過程,RTS,CTS,資料幀,以及ACK視為同一原子操作的一部分。

    使用者可以通過調整RTS閾值,來控制RTS/CTS交換過程。只要大於此閾值,RTS/CTS交換過程就會進行,小於該閾值就會直接傳送幀。

    對應的SOCK欄位如下:

  1. #define SIOCSIWRTS 0x8B22/* set RTS/CTS threshold (bytes) */
  2. #define SIOCGIWRTS 0x8B23/* get RTS/CTS threshold (bytes) */

    

5. WIFI建立關聯過程

    建立連線認證的過程主要由管理幀負責。

序號 SubType 說明
1 1000 Beacon,STA接受AP信標幀,感知到AP,獲取SSID及AP引數
2 0100 STA主動傳送Probe探測請求
3 0101 AP應答STA Prob Response
4 1011 STA傳送Authentication請求認證
5 AP應答Authentication請求,指示STA認證成功或失敗
6 0000 STA傳送Association請求
7 0001 AP應答Association Response

    以上是連線過程,當需要斷開連線時,STA傳送Disassociation

5.1 wifi攻擊原理

    從連線的過程我們可以發現,我們可以採取強制斷開連線,使得STA重新進行連線。以此獲得認證資料包。

    因此,可以利用Disassociation包或Deanthentication包實現。

6. 加密演算法

    安全認證主要由802.11i規範。以下是幾種加密演算法。具體的連線過程將在下篇中說明。

本文參考《802.11無線網路 權威指南》