王 超,張白愚
(信息工程大學 信息工程學院,河南 鄭州 450002)
數(shù)字視頻廣播(Digital Video Broadcasting,DVB)是由國際數(shù)字視頻廣播組織提出的、適用于不同媒介的數(shù)據(jù)傳輸標準,DVB-S是基于衛(wèi)星信道的數(shù)字視頻廣播傳輸標準。衛(wèi)星通信覆蓋范圍廣,不受地域限制,DVB-S接收設備架設方便,性能穩(wěn)定,因此應用十分廣泛。DVB寬帶IP接入技術(IP over DVB)將地面通信網(wǎng)與DVBS衛(wèi)星通信系統(tǒng)連接起來,提供寬帶到戶的服務。
即時通信(Instant Messenger,IM)是指能夠利用網(wǎng)絡即時發(fā)送和接收消息、文件、語音和視頻的業(yè)務。因其信息交互的迅速高效、費用低等特點,自面世以來迅速發(fā)展,用戶數(shù)量迅猛增長。目前,即時通信軟件種類繁多,主要有國外的MSN,ICQ和國內的QQ等。這些軟件在給人們帶來方便快捷的同時,也存在著很多安全隱患,容易被一些非法組織或個人用來傳播色情、反動言論及異端邪說等有害信息,對國家安全和社會穩(wěn)定構成了極大的危害。因此,需要對其流量進行有效的監(jiān)控。即時通信軟件公司不公開自己的通信協(xié)議,并且經常對協(xié)議進行修改,更新軟件版本,新版本的軟件往往界面更精美,功能更豐富,吸引用戶升級。因此,對新版本的通信協(xié)議進行分析并提出流量識別算法意義重大。
DVB-S采用MPEG-2標準傳輸復用比特流,MPEG-2系統(tǒng)層編碼有2種:傳輸流(Transport Stream,TS)和節(jié)目流(Program Stream,PS)。 TS是為易出錯的環(huán)境設計的,PS是為錯誤相對較少的環(huán)境設計的。DVB-S信道傳輸?shù)氖荰S。TS包組成如圖1所示,1個TS包包長為188 byte,其中包頭長 4 byte,由同步字節(jié)(sync-byte)、傳輸誤碼指示(transport_error_indicarot)、有效負載起始指示(payload_unit_start_indicator)、傳輸優(yōu)先級(transport_priority)、包標識(Packet Identification,PID)、傳輸加擾控制(transport_scramble_control)和連續(xù)計數(shù)器(continuity_counter)組成,其中同步字節(jié)的值為0x47,表示一個TS包的開始。包頭后的184 byte為有效負載,用于傳送已編碼的視音頻數(shù)據(jù)流[1]。負載起始處可能包含適應字段(adaption_field),由包頭的適應字段控制指示。
多協(xié)議封裝(Multiple Protocol Encapsulation,MPE)將IP數(shù)據(jù)加上頭部和4 byte的尾部校驗放入TS的有效負載中。MPE頭部包含 12 byte,由 table_id,section_length,MAC_address,payload_scrambling_control,section_num ber和last_section_number等字段組成。table_id的值通常設定為0x3E,表示一個數(shù)據(jù)包分段的開始。IP數(shù)據(jù)的最大長度遠超過TS包長的188 byte,這時需要將IP數(shù)據(jù)分段,然后分別放入多個TS包的負載中。在這種情況下,如果最后一段數(shù)據(jù)沒有占滿一個TS包的負載,下一個新的MPE包將繼續(xù)填充該TS包。此時需要使用長度為1 byte的下一MPE頭起始指示(Next Message Pointer,NMP)來標志MPE包開始的位置。
圖2是一段在TS中使用MPE封裝數(shù)據(jù)的實例。第1字節(jié)“0x47”標識一個TS包的開始,該TS包的PID為“0x03E8”,第 5 個字節(jié)為“0x00”,說明該 MPE 數(shù)據(jù)片在第6個字節(jié)開始,第6個字節(jié)為“0x3E”,驗證該段數(shù)據(jù)為MPE封裝,“0x01E9”說明該MPE數(shù)據(jù)片長度為489 byte。
即時通信軟件每一年都會對版本進行一次或多次更新,所使用的通信協(xié)議也會有所更改,因此,對其新版本的通信協(xié)議進行分析,對協(xié)議識別與流量監(jiān)控來說是必要的。
MSN最新版本為MSN9.0,在該版本中邀請或被邀請與聯(lián)系人進行語音會話的消息語法如下:XXX
其中,XXX為命令,發(fā)送邀請時為UUN,被邀請時為UBN。
由該消息可知,被邀請人的MSN賬號為zhoujie-0001@hotmail.com,消息體中包含用base64編碼過的SIP信令,消息體長度為3582 byte。
對消息體中標簽中的內容進行base64解碼后可以發(fā)現(xiàn),MSN對SIP協(xié)議[2]的部分字段做了簡化,如:From 簡化為 f,To 簡化為 t,Call-Id 簡化為 i,SDP 協(xié)議定義的各域值則沒有變化。消息體較長,這里不再舉例。假設A發(fā)起會話邀請,一般的MSN信令傳遞過程如圖3所示。
ICQ當前最新版本為6.5。其消息可劃分為FLAP,SNAC以及數(shù)據(jù)和參數(shù)3層[3]。ICQ的數(shù)據(jù)按照“類型,長度,值”的格式組織,稱為 TLV(Type,Length,Value)結構。
圖4是一個語音通話邀請消息的示例,數(shù)據(jù)按每行6 byte顯示,可以很清楚地對應到FLAP和SNAC層的數(shù)據(jù)段。在最后一個TLV結構中發(fā)現(xiàn)傳送了一個1096 byte的SIP信令。
QQ是國內用戶使用最多的即時通信軟件,最新版本為QQ2009SP5。QQ對其發(fā)送的消息進行了加密,無法從它的會話協(xié)商消息中獲得客戶端點對點通信的IP地址和端口。文獻[4]提出凈荷特征匹配串有“SIP/user-agent:Tencent-VQQ”和“SIP/reason=100”等。 在本文的分析中發(fā)現(xiàn),新版本的QQ中相應的特征已經不存在。但其音頻包的特征較為明顯,QQ2009的音頻包較以前版本有多處改動。首先,數(shù)據(jù)包的首字節(jié)固定為0x05,第2,3字節(jié)為序號,每次增加1。QQ傳送語音和視頻時使用同一端口,當?shù)?字節(jié)為0x01時,說明數(shù)據(jù)包傳送的是音頻數(shù)據(jù),為0x03時,說明傳送的是視頻數(shù)據(jù)。第6字節(jié)后是QQ數(shù)據(jù)包頭封裝的RTP數(shù)據(jù)。
3種即時通信軟件采用不同的通信協(xié)議,通過前面的分析可以得出以下結論:
1)從安全角度對比3種通信協(xié)議,QQ對通信協(xié)議進行了加密,安全性最高;MSN對SIP協(xié)議進行了base64編碼,使通信內容不可見,安全性次之;ICQ采用明文傳輸,安全性最差。
2)在通信方式上,3種即時通信協(xié)議建立點對點語音會話均需通過服務器發(fā)送建連消息,而服務器端口固定,MSN為1863,ICQ為5190,QQ為8000,使得第一時間能夠發(fā)現(xiàn)即時通信語音流量。
3)在語音會話的控制信令體系方面,MSN和ICQ都使用SIP協(xié)議來建立會話連接,通過解析SIP信令可以找出會話雙方的點對點通信端口。
4)在音頻數(shù)據(jù)包傳輸方面,3種通信協(xié)議都使用RTP傳輸語音數(shù)據(jù)。其中,MSN和ICQ直接使用,QQ對RTP協(xié)議進行了封裝。
通過對即時通信協(xié)議的分析,筆者提出了一種基于協(xié)議流程和深度包檢測(Deep Packet Inspection,DPI)的DVB-S即時通信語音流量識別算法,算法包括3部分:
1)DVB-S中IP數(shù)據(jù)采集。DVB-S接收機將TS包封裝成UDP包后通過Socket發(fā)送到語音流量監(jiān)控終端,在語音流量監(jiān)控終端上,通過設置Socket接收UDP數(shù)據(jù)并提取TS數(shù)據(jù)包。對接收到的TS包,去除TS包包頭、MPE包頭和校驗位,根據(jù)封裝數(shù)據(jù)的長度進行IP數(shù)據(jù)重組。短的IP數(shù)據(jù)不足188 byte,在TS負載的剩余部分可填充0xFF,也可將多個短IP數(shù)據(jù)封裝在同一TS中。在提取IP數(shù)據(jù)的過程中應注意,當一個TS封裝多個IP數(shù)據(jù)包時,NMP指示的是第一個IP數(shù)據(jù)包的位置。
2)即時通信消息處理。獲取一個IP數(shù)據(jù)包,由第3節(jié)對即時通信協(xié)議分析得到的特征,判斷是否為MSN和ICQ的會話消息,這2種消息可由一個或多個IP包傳送,需要對消息拼接重組。得到完整的消息后,將其中的SIP信令,送入SIP協(xié)議解析模塊,這里只對INVITE,SIP/2.0200 OK,CANCEL 和 BYE 4種消息做處理,以降低算法復雜度。該模塊獲得其中的關鍵信息,包括收發(fā)雙方的賬號、呼叫ID、用于收發(fā)音頻數(shù)據(jù)包的IP地址和端口,DVB-S信道為單向信道,因此,只能得到一方的IP地址和端口。這里需要維護如下形式的會話信息表:
當收到INVITE或 SIP/2.0200 OK(CSeq INVITE)時建立表,當收到CANCEL時刪除表,收到BYE時保存數(shù)據(jù)并刪除表。處理流程如圖6所示。
3)即時通信音頻數(shù)據(jù)處理。獲取一個IP數(shù)據(jù)包,判斷該包是否為RTP數(shù)據(jù),如果是,查找會話信息表,將該IP數(shù)據(jù)包的源IP地址和源端口號與會話信息表中的IP地址和端口號進行匹配。如果匹配成功,則按RTP數(shù)據(jù)包序號將RTP負載存放到相應位置。由于無法由QQ消息獲得收發(fā)音頻數(shù)據(jù)的IP地址和端口,但它的音頻數(shù)據(jù)包有明顯的特征,不容易與其他數(shù)據(jù)相混淆,這里應用DPI匹配QQ音頻數(shù)據(jù)特征,當匹配成功時,查找會話信息表,如果信息存在,則將數(shù)據(jù)存儲,如果不存在,則建立關鍵信息表,并將IP地址和端口號存入表中,如圖7所示。
根據(jù)筆者提出的算法開發(fā)系統(tǒng),在實驗室自行開發(fā)的DVB-S機頂盒和PC機上驗證證明了其可行性。為定量驗證算法的有效性,在2臺連接互聯(lián)網(wǎng)的計算機上分別使用3種即時通信軟件進行語音會話,各呼叫100次,使用Ethereal軟件捕獲數(shù)據(jù)包保存,并抓取2 h的上網(wǎng)流量,其中包括瀏覽網(wǎng)頁、在線聽音樂、觀看視頻、游戲、使用BT、eMule、迅雷等工具下載等,共計2.13 Gbyte。使用即時通信語音流量監(jiān)控算法處理IP數(shù)據(jù)包,結果如表1所示。
表1 即時通信語音流量監(jiān)控算法測試結果
由于本文算法是為DVB-S的單向信道設計的,而實驗數(shù)據(jù)為雙向數(shù)據(jù),因此對識別會話次數(shù)做除2處理。從實驗結果可以看出,對MSN和ICQ采用的基于協(xié)議流程和DPI的語音流量識別方法,準確性很高,而對QQ的語音流量識別只應用了DPI進行特征匹配,因而引入了少量誤差,這種情況可以通過為語音包數(shù)量設定閾值來消除。
著眼于DVB-S中即時通信語音流量監(jiān)控需求,筆者研究了DVB-S的TS流結構以及對IP數(shù)據(jù)的多協(xié)議封裝技術。在對MSN,ICQ和QQ 3種即時通信協(xié)議的語音會話消息和音頻數(shù)據(jù)包分析的基礎上,提出了DVB-S中即時通信語音流量識別算法,實現(xiàn)了對上述3種即時通信的語音流量識別,取得很好的效果。
[1]ETSI EN 3004211997,Digital Video Broadcasting (DVB):framing structure channel coding and modulation for 11/12 GHz satellite services[S].1997.
[2]糜正琨.IP網(wǎng)絡電話技術[M].北京:人民郵電出版社,2000.
[3]李遠杰,劉渭鋒,張玉清,等.主流即時通軟件通信協(xié)議分析[J].計算機應用研究,2005,22(7):243-245.
[4]王攀,金婷,張顱頤,等.基于智能會話關聯(lián)的騰訊語音流量識別算法[J].計算機工程,2007(17):l37-139.