RDP协议详细解析
一 前言
二 概述
三 同络层次
四 各连接模块说明
五 各功能模块说明
六 rdpwin结构、数据流说明
七 总结
一、前言
windows从NT开始提供终端服务,它是微软买来的网络协议技术(Citrix),服务器端要安装、配置,客户端要连接程序。终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。
目前,关于RDP服务的linux客户端程序有winconnect,linrdp,rdesktop,前两个没有源码,但redsktop已经由原来的个人开发后公开代码演变成现在的项目组开发。由于项目的跨平台开发需要,我们在开始时进行过单独的协议破解工作,破解后,我们的程序在原来的RDP4.0基础上扩展到5.1,实现了16位颜色,声音本地回放, 映射本地打印机。对于当前的终端机,这些功能完全满足需要,因此其他功能暂不便破解实现。为防患RDP协议的升级而影响我们破解而得的终端程序的功能性,需要对RDP协议的变化进行跟踪,对et-rdesktop进行优化、完善。鉴于当前的工作安排,将跟踪redsktop项目的进展,以提炼功能为我所用和完善现有程序。
二、概述
1 版本功能说明:
RDP协议在终端服务推出后已有四个版本,4.0、5.0、5.1、5.2。一般来说,版本是根据windows的版本确定的。
从客户端的角度来说,5.X版本间提供的功能差别不是很大,相对于4.0版本,它提供了用户带密码直接登录、客户端驱动器资源映射、客户端音频回放、最高24位色显示和符合FIPS加密级别连接。
另外,从4.0协议开始变提供的客户羰功能有:高、中、低三种数据加密级别,客户端自定义初始登录环境,客户端打印机映射,客户端LPT端口映射,客户端com端口映射,剪贴板映射,客户登录的个性化设置(包括键盘、显示界面大小等)。
2、协议层次说明:
通过破解研究,我们掌握了RDP协议的基本层次结构。基本上,RDP协议的每一层次上都标示出其层内的数据长度值。
对于层次划分,主要是指RDP协议网络功能数据传送时通常都包含的各层次,而对于各层次内所实现的单层次连接等功能将做为单独的模块来进行阐述。
网络连接层:RDP协议建立在TCP/IP协议之上,由于传输的数据量比较大,因此在协议的底层首先定义一层网络连接层。它定义了一个完事的RDP数据逻辑包,以避免由于网络包长度过长而被分割使数据丢失。
ISO数据层:在网络连接层之上是ISO数据层,它表示RDP数据的正常连接通信。
虚拟通道层:在ISO数据层之上,RDP协议定义一个虚拟通道层,用以拆分标示不同虚拟通道的数据,加快客户端处理速度,节省占用网络接口的时间。
加密解密层:在虚拟通道层之上,RDP定义一个数据加密解密层。此层用于对所有的功能数据进行加密、解密处理。
功能数据层:在加密解密层之上是功能数据,画面信息,本地资源转换,声音数据,打印数据等所有的功能数据信息都在此层进行处理。另外,根据数据类型的不同,这些数据都有各自不同层次的分割,他们的内部层次结构将在各个功能模块中进行阐述。
3 其它说明:
本协议解析中所提到的各层次结构都是指RDP功能数据正常传送时的各底层结构,在功能数据传送前的各层次的建立连接过程及其结构、实现都归于模块实现来进行说明。
对于服务器端的各种设置以及个版本间的内部实现差异请看RDP帮助文档,以及rdpwin开发文档。
4 连接过程说明:
1) 客户端连接服务器
2) ISO数据层建立连接
3) 发送初始协议相关信息,接收加密、解密密钥
4) 虚拟通道申请
5) 加密形式发送客户端系统信息,同时验证加密协议
6) 平台软件证书验证
7) 各功能建立连接,各功能数据传输,功能实现
三、网络层次:
1 网络连接层:
在RDP协议网络实现连接中,本层的数据格式是固定的。
内容
|
协议版本号
|
保留
|
此逻辑包长度
|
字节数
|
1
|
1
|
2
|
值
|
当前版本皆是3
|
0
|
逻辑长度,从版本号开始到本包结束
|
2 ISO数据层:
在RDP功能数据网络传输中,本层的数据格式是固定的。
内容
|
单层数据长度
|
ISO包类型
|
标志
|
字节数
|
1
|
1
|
1
|
值
|
2,从下字节开始计算
|
0xf0,表示数据
|
0x80
|
3 虚拟通道层:
虚拟通道层用于在正常的网络连接数据之上,中个虚拟通道的功能数据。此层次的连接另见初始连接模块与通道申请模块,在此只说明正常数据连接时的层次结构。
1) 结构信息:
内容
|
类型
|
虚拟通道个数
|
虚拟通道号
|
标志
|
字节数
|
1
|
2
|
2
|
1
|
值
|
0x64/0x68
|
0x0001
|
0x03eb至0x03ee
|
0x70/0xf0
|
2) 类型说明:
0x64:客户端发送数据
0x68:客户端接收数据
3) 用户号说明:
本次连接的用户号,服务器发送的是0x0001;客户端所发送的值是初始连接时请示通道后服务器同意开通的虚拟个数。
4) 虚拟通道号说明:
虚拟通道号是本层次以上所发送的功能数据所在的虚拟通道号,其由初始连接通道申请建立时确定。
5) 标志说明:
客户端发送的标志为0x70;服务器端发送的标志,当功能数据是图像是(由通道号识别),其值为0x70,当功能数据是其它数据时,其值为0xf0。
4 加密解密层:
加密解密层用于对网络连接中所发送、接收的数据进行加密、解密。为保证数据和系统的安全性,对网络数据进行加密传输是比较常用且必然的,RDP协议在此层对实际的功能数据进行加密。
1) 结构信息:
内容
|
单层及层上数据总长度
|
加密标志
|
未知标志
|
数字签名
|
字节数
|
1-2
|
2
|
2
|
8
|
值
|
从下字节开始计算
|
0x0800
|
0x1000/0x0203
|
顺序取得
|
2) 总长度说明:
若长度大于0x7f,则长度以两字节表示,并按位与0x8000。这是由于版本升级赞成的格式不统一,长度不定,当前版本认为长度值不大于0x0fff(4095)因此只用长度值并按位与0x8000实现版本兼容,在版本升级后会以0x8x表示长度值的字节数,其中8表示非1字节,x表示具体的字节个数。
3) 加密标志说明:
RDP协议要求在正常的功能连接实现之前,首先licence认证,其标志为0x8xxx,且其后数据不同于正常功能数据传输式的加密层格式,可以视licence认证为加密解密层的建立连接过程。另外功能数据的加密、解密的密钥是在初始连接时获得的,而加密解密功能的实现由加密、解密模块阐述。
4) 未知标志说明:
服务器端发送过来的未知数据有两种,目前不知其意,客户端在发送数据时将其置为0x0000值。
5) 数字签名说明:
对所有的加密数据在此放置8字节数字签名。其值由RC4会话键值和功能数据经过SHA运算和MD5运算得到。
5 功能数据层:
功能数据是客户端与服务器进行交互的真正数据。他们都有各自固定格式,连接、控制方式,具体情况见各功能模块的说明。
根据当前我们所掌握的信息,RDP协议将图像信息、声音信息、设备信息、剪贴板内容都各自以单一的虚拟通道进行传送,而打印机映射,磁盘映射,端口映射都做为设备信息的内容进行处理。限于当前左上角工作和项目工作的限度,设备信息中只考虑了打印机映射的部分,对于打印机信息与其他的设备相关的信息没有进行有效隔离区分,而本协议说明中相关的连接信息、数据传送都只认为是打印机映射的内容。
此博文原地址为:http://blog.chinaunix.net/u/2244/showart_2154205.html
分享到:
相关推荐
### RDP协议详细解析 #### 一、前言 RDP(Remote Desktop Protocol)协议是微软为Windows系统设计的一种远程桌面通信协议,旨在提供一种安全的远程访问方式,让用户能够远程控制服务器或另一台计算机。从Windows ...
本文将详细解析文档中的关键知识点,包括RDP协议的背景介绍、更新内容以及这些变化的原因。 #### 二、RDP协议简介 RDP协议是一种面向连接的数据传输协议,旨在提供一种可靠的端到端数据传输服务。它通过一系列机制...
**二、RDP协议结构解析** #### 1. TPKT层(Transport Layer Protocol) RDP协议在其传输过程中采用了TPKT(Transport Layer Protocol)作为其传输层协议之一。TPKT是一种用于定义网络传输层协议的数据包格式,主要...
### NC环境中的RDP协议解析 #### 一、NC环境基础介绍 ##### 1.1 基本概念与工作原理 网络计算机(Network Computer,简称NC),是一种依赖网络提供大部分资源来运行的终端计算机。它摒弃了传统PC中的硬盘、软盘...
### RDP协议官方文档知识点解析 #### 一、概述 **RDP协议(Remote Desktop Protocol)** 是由微软开发的一种专用于远程桌面连接的技术标准。它允许用户通过网络连接到另一台计算机上,并以图形界面的方式操作这台...
开源项目FreeRDP是实现RDP协议的一个重要实现,它提供了一个跨平台的远程桌面客户端,支持多种操作系统,包括Windows、Linux、macOS等。 FreeRDP源码解析: 1. **项目结构**: FreeRDP的源码结构通常包含多个模块...
结合提供的文档,"RDP解析"可能详细讲解了上述各部分的工作原理和交互流程。通过阅读这些文档,你可以深入了解RDP如何处理数据包,如何进行安全通信,以及如何优化远程桌面体验。虽然RDP协议分析可能涉及的技术细节...
RDP协议支持多种可选通道,如剪贴板、音频、打印等。在FreeRDP中,这些通道由独立的模块实现,每个模块负责特定的功能。在连接过程中,客户端会根据配置决定哪些通道需要开启,并调用相应的初始化函数来建立这些...
1. RDP协议:FreeRDP实现了微软的远程桌面协议,这是一种用于远程桌面访问的标准,支持多种功能,如音频播放、打印、文件传输等。RDP协议在不断演进,FreeRDP需要跟进行业标准,确保与最新版本的服务器兼容。 2. ...
FreeRDP支持RDP协议的安全层,包括TLS和NLA(网络级身份验证)。这些安全措施确保了数据传输的隐私和完整性。 ### 8. 多平台支持 FreeRDP的跨平台特性使其成为移动设备和嵌入式系统的理想选择。例如,可以在...
RDP协议由多个子组件组成,如输入、输出、会话管理等,这些都可能在这个文件中找到。 4. **orders.c**:RDP订单(Orders)是RDP中用于描述图形操作的一种编码方式,比如绘制文本、线条、矩形等。这个文件应该实现了...
另一方面,没有安全的开源RDP协议实现。 最后,我想构建一个高度安全,跨平台和高度可定制的客户端。 安装 要将rdp-rs用作项目中的库,请将以下内容添加到Cargo.toml : [dependencies] rdp-rs = "0.1.0" 您可以...
1. **协议理解与解析**:深入理解RDP协议的工作原理是开发的基础。这包括但不限于如何建立连接、数据传输方式等。 2. **安全机制**:RDP框架的安全性至关重要。开发过程中需要考虑加密算法的选择、认证机制的设计等...
RDP(Remote Desktop Protocol)是微软提供的一种远程桌面连接协议,允许用户通过网络访问和控制远程计算机。在处理RDP文件时,有时我们需要在其中设置密码以便安全地进行远程访问。RDP文件实际上是一个文本文件,...
在C++和C#中实现RDP客户端功能涉及多个关键知识点,包括网络通信、协议解析和图形界面设计。 1. **网络通信基础**:RDP客户端首先需要与远程服务器建立TCP连接。这涉及到套接字编程,理解TCP/IP协议栈的工作原理,...
3. **协议解析**:RDP协议有自己的数据结构和报文格式,源码会展示如何解析和构建这些报文,以便正确地与远程桌面服务进行交互。 4. **事件驱动编程**:易语言支持事件驱动编程模型,源码中可能包含事件的定义和...
RDP(Remote Desktop Protocol)是实现这一服务的技术基础,它使得用户能够在一个单独的会话中远程运行应用程序,而无需实际坐在服务器或工作站前。 在Windows Server 2012 R2、2012、2008 R2和2008等版本中,RDS...
3. **RDP协议**:理解RDP的工作原理,包括连接流程、认证机制以及.RDP文件的结构和配置选项。 4. **文件操作**:在VC++中读写文件,特别是.RDP文件,需要知道如何解析和编辑这些文件的格式。 5. **安全性**:确保...
综上所述,基于Linux的RDP客户端设计是一个综合性的技术挑战,涉及到网络协议、系统编程、跨平台兼容性以及协议解析等多个领域的知识。这样的项目不仅有助于扩展Linux的功能,也为研究和改进RDP协议提供了实验平台。
开发者需要对网络编程、协议解析、图形编码解码和安全性有深入的理解。使用这样的插件可以帮助简化RDP功能的实现,但同时也需要关注性能、兼容性和安全性等问题。在实际开发中,通常会遵循Microsoft的公开规格和已有...