關於RDP協議的分析(一)

2021-06-16 05:08:20 字數 3209 閱讀 9485

關於rdp協議的分析(一)

關於rdp協議的分析和研究

-------------- leadgenius

寫這個一是便於學習,再就是與網友們共同討論,有一些我也不確定的,只是我的理解,希望看到這篇文章的人進行指正,並給我來信謝謝。再一就是這裡只有有關4.0版本的內容,希望有高手補充5.1/5.2的協議文件。

rdp是微軟終端服務應用的協議,服務端基於win2000/winnt。協議基於t.128(t.120協議族)提供多通道通訊。在客戶端支援多種資源緩衝和資料的壓縮處理。

本文的內容主要是對rdesktop源**的分析,應用rdp4.0協議,可與win2000/winnt通訊,也可與win2003(rdp5.1)通訊,但不具備rdp5.1協議的特性。

協議通過tcp/ip進行資料傳輸,在實際資料前進行了iso/mcs/sec三層的包裝,iso/mcs兩層為多點並髮式通訊提供了可靠的傳輸保障,sec層提供對rdp詳細資料的加解密處理。各層在資料的前端加有一段資料頭,用於對資料、傳輸的控制。具體的資料控制由stream型別的結構體管理(這種方法很靈活、易懂,可作為網路程式設計者的參考),不同的資料頭由不同的結構成員管理,層次清晰。

rdp協議將終端虛擬環境中的裝置對映為不同的資料報,將對裝置的輸入輸出(i/o)重定向到網路控制代碼中,不同裝置的資料按不同格式組織成為小的資料報,並將多個小資料報封裝成為乙個大的資料報通過網路一次性發出,對方將網路解收的資料進行分解成為小包並按裝置資料的型別進行不同的處理。

另乙個值得注意的是使用了t.128協議族的asn.1 ber(基本編碼規則)。我記得網上有一篇文章提到中國的程式設計師很多,可是會網路程式設計的不多,懂得基本編碼規則的就少之又少。其實基本編碼規則很簡單,可以到網上查詢一些有關t.128&t.129的文章來看一下,很有用的。有時間我會協議篇關於此的貼子。

如果有想學網路程式設計的朋友,可以看一下rdesktop這個軟體的**,能學到不少的東西。

一、    網路包控制結構(stream定義於 prase.h :2  typedef struct stream *)

結構用於對收到的tcp包的資料進行初期分解,按照不同的協議逐步將包中的rdp資料分離出來,為rdp資料的進一步分解做準備。

typedef struct stream

*stream;

結構包含:

p指標:臨時指標變數,用於計算定位。

data指標:tcp/ip資料的起始位置,是申請的一段記憶體,只當資料尺寸大於size時,進行realloc增大,不縮小。

size指標:tcp/ip資料的尺寸大小

end指標:tcp/ip資料的結束位置

//以上是tcp資料管理變數

iso_hdr指標:tcp/ip資料報中iso協議控制頭的位置

mcs_hdr指標:tcp/ip資料報中mcs協議控制頭的位置

sec_hdr指標:tcp/ip資料報中sec協議控制頭的位置

rdp_hdr指標:tcp/ip資料報中rdp協議控制頭的位置

主要結構只建立一遍(in & out),結構資料及緩衝由tcp.c模組維護。

iso控制頭:7位元組

mcs控制頭:8位元組

sec控制頭:0(如果已經獲得許可證—通訊協定)、4(未獲許可)

或12(進行加密時)位元組

由sec頭控制的資料段即是rdp的主要資料,一般進行了加密。

二、    tcp

負責維護與伺服器的連線和資料。

一下stream結構的成員負責維護tcp資料:

p指標:臨時指標變數,用於計算定位。

data指標:tcp/ip資料的起始位置,是申請的一段記憶體,只當資料尺寸大於size時,進行realloc增大,不縮小。

size指標:tcp/ip資料的尺寸大小

end指標:tcp/ip資料的結束位置

p指標的作用:

在控制結構中,對於確定的傳送資料和接收資料,其他各指標的含義和內容相對固定,而對於包中要計算、改動和提交到下一層處理的具體資料的定位工作就要靠p指標來完成。

在prase.h中定義了大量的關於使用p指標的運算用於對協議頭段的處理,並且在各層協議處理模組中使用p指標定位、區分處理過和未處理的資料。

tcp_init():初始out結構的資料緩衝和data、size、end、p變數

tcp_connect():建立網路連線並建立輸入和輸出資料控制結構(in & out)、網路控制代碼sock

tcp_disconnect():關閉網路控制代碼sock

tcp_send():傳送tcp資料(out控制)到sock

tcp_recv():接受定長tcp資料由sock到in,維護in結構緩衝,並調整in.tcp管理變數

三、    iso

tcp傳輸之上,基於iso頭的定義,我在這裡將簡單的資料傳輸協定分為控制和資料兩種,由pdu頭段資料區分,主要是type2。

type1:控制pdu,長11位元組,用於連線控制

1位元組:協議版本號 = 3

2位元組:保留

3-4位元組:包長度(由第一位元組到包結束)

5位元組:資料偏移 = 6(iso頭段結束的下一位距本位元組的偏移量)

6位元組:包型別 = iso_pdu_cr = 0xe0(連線請求)

iso_pdu_cc = 0xd0(連線建立)

iso_pdu_dr = 0x80(中斷請求)

iso_pdu_er = 0x70(錯誤)

7-8位元組:dst_ref = 0(忽略)

9-10位元組:src_ref = 0(忽略)

11位元組:class = 0(忽略)

type2:資料pdu,長度 = 資料長度 + 7位元組,用於資料傳輸

1位元組:協議版本號 = 3

2位元組:保留

3-4位元組:包長度(由第一位元組到包結束)

5位元組:資料偏移 =2(iso頭段結束的下一位距本位元組的偏移量)

6位元組:包型別 = iso_pdu_dt = 0xf0(資料傳送)

7位元組:eot = 0x80

iso資料開始

iso_init():初始out控制結構,預留iso頭段空間,並將iso_hdr指向頭段位置

iso_send_msg():傳送乙個單一的控制訊息資料報

iso_recv_msg():接收資料的頭段,分析包型別調整in結構指向資料位置,並傳回包型別

iso_send():填充iso頭段,並傳送資料

iso_recv():接收iso資料報,去處頭段,調整in結構指向資料位置

iso_connect():建立iso連線

iso_disconnect():中斷iso連線

RDP 協議應用結構分析

基於 rdp 的應用一般應該包括三個部分 終端伺服器 使用者介面傳輸協議和客戶端。其中使用者介面傳輸協議允許客戶機連線到終端伺服器獲取伺服器上正在執行的應用程式的資訊。客戶端的顯示與伺服器端的執行介面通過使用者介面傳輸協議進行運算元據與現實資料的交換與傳輸。在 rdp 的應用中,由使用者介面傳輸協議...

rdesktop架構解析 RDP協議分析)

出自 http blog.csdn.net songbohr 本文立足於rdesktop的架構層次進行解析,算是拋磚引玉,國內對rdp協議深入解析的資料到本文發布時為空白!呼叫層次 rdp sec mcs iso tcp 協議包編譯碼層次 rdp hdr sec hdr mcs hdr iso hd...

RDP協議詳細解析(一)

rdp 協議詳細解析 一 前言 二概述 三同絡層次 四 各連線模組說明 五 各功能模組說明 六rdpwin 結構 資料流說明 七 總結 一 前言 windows 從nt開始提供終端服務,它是微軟買來的網路協議技術 citrix 伺服器端要安裝 配置,客戶端要連線程式。終端服務使任何一台有許可權的終端...