SMS PDU編碼數據串格式分析

PDU協議數據單元詳細介紹前端

PDU 至關於一個數據包,它由構成消息(SMS)的信息組成。做爲一種數據單元,它必須包含源/目的地址、保護(有效)時間、數據格式、協議類型和正文,正文長度可達140字節,它們都以十六進制表示。PDU結構根據短消息由移動終端發起或以移動終端爲目的而不一樣。算法

PDU 中 USC 16bit編碼用於發送Unicode字符,即中文等,7bit只能發ASCII字符,8bit用來發數據信息如圖片鈴音等。短信息內容長度140字節,最大能夠發送160個字符,其中每一個字符與編碼方式佔比爲 [160字符/7位],[140字符/8位]或[70個字符/16位],在3GPP TS 24.011, 子條款 7.3. 定義了SMS消息應被封裝在RPDUs(中繼協議數據單元)數據串中。其中RPDU數據經過SIP MESSAGE Requests從一個蜂窩網絡到另外一個蜂窩網絡,這些SIP請求應當使用MIME類型「application/vnd.3gpp.sms」網絡

6種PDU介紹:app

1.SMS-DELIVER,包含從SC到MS的消息(基站發給手機的短信)。
2.SMS-DELIVER-REPORT,包含
    a)失敗緣由(若是須要的話)
    b) 對於SMS-DELIVER或SMS-STATUSREPORT的確認
3. SMS-SUBMIT,包含從MS到SC的消息(從手機發出到基站的短信)。 
4. SMS-SUBMIT-REPORT,包含
    a)失敗緣由(若是須要的話)
    b) 對於SMS-SUBMIT或SMS-COMMAND的確認
5. SMS-STATUS-REPORT,包含從SC到MS的狀態報告。
6. SMS-COMMAND,包含從MS到SC的命令。

GSM 7 bit Default Alphabetide

每一個字符表明7位,參閱3GPP TS 23.038 或 ETSI GSM 03.38.編碼

7bit 的編碼方式規則:spa

7bit編碼是把全部8bit 數據的高位去掉,造成7bit 數據,接下來將7bit數據的第二個字節的最低位,移到第一個字字節的最高位形第一個新的8位數據,再把第三個字節的最後兩位移到第二個字節的最高位形第二個新的數據,以此類推,最後一個不足8位的7bit 數據所有用0補充造成一個新的8bit數據。解碼過程與編碼過程相逆。3d

(GSM 7 bit Default Alphabet)code

Numbering-plan-identification(號碼鑑別)orm

0000—未知,0001—ISDN/電話號碼(E.164/E.163),1111—留做擴展;

通常默認爲0001(國際格式),表示電話號碼類型的。

下面是GSM03.40號碼鑑別的解釋:

Bits3 2 1 0  
0 0 0 0    Unknown  
0 0 0 1    ISDN/telephone numbering plan (E.164/E.163) 
0 0 1 1    Data numbering plan (X.121) 
0 1 0 0    Telex numbering plan 
1 0 0 0    National numbering plan 
1 0 0 1    Private numbering plan  
1 0 1 0    ERMES numbering plan (ETSI DE/PS 3 01-3) 
1 1 1 1    Reserved for extension

RP-DATA (SMS-SUBMIT類型 手機到基站) 

參考:3GPP TS 24.011 subclause 7.3.1.2

RP-MESSAGE:000000069133010000F019069133010000F011000A9133163254760000AA05F330BB4E07
RPDU:000000069133010000F019 TPDU (SMS-SUBMIT):069133010000F011000A9133163254760000AA05F330BB4E07 

短信內容:salut

數據串解碼

RPDU數據串

00 RP-Message Type  比特值=000 方向=手機到基站(Mobile Station to Network) RP-Message=RP-DATA
00 RP-Message Reference  值=0x00
00 RP-Originator Address  該字段僅包括長度指示符,對於傳出信息,沒有定義

RP-Destination Address

此項爲短信中心地址, 06表明地址長度,91=號碼鑑別,用國際格式號碼(在前面加‘+’),33010000F0=短信中心號碼+331000000,由於長度是9位奇數,最後一個字節的5~8比特會所有置爲1因此就是補‘F’湊成偶數個

說簡單點就是2位爲一組,先後調換33先後調換爲33,01調換爲10,0000怎麼調換都是0,連起來就是3310000000

19 RP-User Data  十六進制佔一個字節大小(表明十進制的25),表示TPDU的數據長度

TPDU數據串

SMSC Address information

短信中心地址信息,包含目標短信中心地址,06=地址長度,91=號碼鑑別,用國際格式號碼(在前面加‘+’),33010000F0=短信中心號碼+331000000,由於長度是9位奇數,最後一個字節的5~8比特會所有置爲1因此就是補‘F’湊成偶數個

說簡單點就是2位爲一組,先後調換33先後調換爲33,01調換爲10,0000怎麼調換都是0,連起來就是3310000000

11 SMS-SUBMIT first octet    基本參數,不拒絕重複/無有效期/無狀態的請求/沒有用戶數據頭/無回覆路徑
00 TP-Message Reference

TP-Destination-Address

0A=地址長度(表明十進制的10),91=號碼鑑別id=ISDN,3316325476=+3361234567

00 TP-Protocol-identifier
00 TP-Data-Coding-Scheme    00表示7-bit編碼(英文)、04表示8-bit編碼(圖片和鈴聲)、08表示UCS2編碼(漢字)
AA TP-Validity-Period        有效期4天

05 TP-User-Data-Length        當使用7bit編碼,長度就是消息內容字符數(salut=長度爲5位)

在各類編碼方式下意義有所不一樣。7-bit編碼時,指原始短消息的字符個數,而不是編碼後的字節數。8-bit編碼時,就是字節數。UCS2編碼時,也是字節數,等於原始短消息的字符數的兩倍。若是用戶信息(TP-UD)中存在一個頭(基本參數的TP-UDHI爲1),在全部編碼方式下,用戶信息長度(TP-UDL)都等於頭長度與編碼後字節數之和。若是採用GSM 03.42所建議的壓縮算法(TP-DCS的高3位爲001),則該長度也是壓縮編碼後字節數或頭長度與壓縮編碼後字節數之和。

TP-User-Data

F330BB4E07 在這個例子中內容爲 salut

RP-DATA (SMS-DELIVER類型 基站到手機) 

RPDU參考:3GPP TS 24.011 subclause 7.3.1.1
TPDU參考:3GPP TS 23.040 subclause 9.2.2.1 RP-MESSAGE:0100069133010000F0001E069133010000F0040A91331632547600000000000000000005F330BB4E07
RPDU:0100069133010000F0001E TPDU (SMS-DELIVER):069133010000F0040A91331632547600000000000000000005F330BB4E07

數據串解碼

RPDU數據串

01 Message Type Indicator 0 0 1  n -> ms  RP-DATA (傳送方向爲基站到手機)
00 Message Reference

RP-Originator Address

06 短信中心地址長度
91 號碼鑑別,國際格式號碼(在前面加‘+’)
33010000F0=短信中心號碼+331000000,由於長度是9位奇數,最後一個字節的5~8比特會所有置爲1因此就是補‘F’湊成偶數個
說簡單點就是2位爲一組,先後調換33先後調換爲33,01調換爲10,0000怎麼調換都是0,連起來就是3310000000

00 RP-Destination Address  該字段僅包括長度指示符,對於傳入信息,沒有定義
1E RP-User Data  十六進制佔一個字節大小(表明十進制的30),表示TPDU的數據長度

TPDU數據串

SMSC Address information

短信中心地址信息,包含目標短信中心地址,06=地址長度,91=號碼鑑別,用國際格式號碼(在前面加‘+’),33010000F0=短信中心號碼+331000000,由於長度是9位奇數,最後一個字節的5~8比特會所有置爲1因此就是補‘F’湊成偶數個

說簡單點就是2位爲一組,先後調換33先後調換爲33,01調換爲10,0000怎麼調換都是0,連起來就是3310000000

04 TP-User-Data-Header-Indicator PDU類型:SMS-DELIVER

bit1  bit0      Message type
  0    0        SMS-DELIVER (in the direction SC to MS)
  0    0        SMS-DELIVER REPORT (in the direction MS to SC)
  1    0        SMS-ST A TUS-REPORT (in the direction SC to MS)
  1    0        SMS-COMMAND (in the direction MS to SC)
  0    1        SMS-SUBMIT (in the direction MS to SC)
  0    1        SMS-SUBMIT-REPORT (in the direction SC to MS)
  1    1        Reserved

TP-Originating-Address

0A 地址長度
91 號碼鑑別,國際格式號碼(在前面加‘+’)
3316325476 短信發送方號碼+3361234567

說簡單點就是2位爲一組,先後調換,33先後調換爲33,16調換爲61,32爲23,54爲45,76爲67,連起來就是3361234567

00 TP-Protocol-identifier   
00 TP-Data-Coding-Scheme    00表示7-bit編碼(英文)、04表示8-bit編碼(圖片和鈴聲)、08表示UCS2編碼(漢字)
00000000000000 TP-Service-Centre-Time-Stamp    時間戳,此例未設置
05 TP-User-Data-Length        當使用7bit編碼,長度就是消息內容字符數(salut=長度爲5位)

TP-User-Data

F330BB4E07 在這個例子中內容爲 salut


openBTS 發送pdu中文短信的問題,簡單記錄下:sendsmspdu只在openBTS2.6的版本中代碼,以後的版本中,已經取消了該部分功能,在CLI目錄代碼裏只實現了sendsms的代碼;不本身碼代碼的狀況下,從「華爲過360,gsms1800」這類僞BTS系統看「黑產技術牛」寫的相關代碼可解決。 ​​​​

僞BTS基站系統前端代碼分享

連接:https://pan.baidu.com/s/1jJuPIuU 密碼:sg92

相關文章
相關標籤/搜索