RDP协议详细解析(一)

RDP协议详细解析

 

前言

概述

同络层次

各连接模块说明

各功能模块说明

rdpwin结构、数据流说明

总结

 

 

一、前言

windowsNT开始提供终端服务,它是微软买来的网络协议技术(Citrix),服务器端要安装、配置,客户端要连接程序。终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。

目前,关于RDP服务的linux客户端程序有winconnectlinrdprdesktop,前两个没有源码,但redsktop已经由原来的个人开发后公开代码演变成现在的项目组开发。由于项目的跨平台开发需要,我们在开始时进行过单独的协议破解工作,破解后,我们的程序在原来的RDP4.0基础上扩展到5.1,实现了16位颜色,声音本地回放, 映射本地打印机。对于当前的终端机,这些功能完全满足需要,因此其他功能暂不便破解实现。为防患RDP协议的升级而影响我们破解而得的终端程序的功能性,需要对RDP协议的变化进行跟踪,对et-rdesktop进行优化、完善。鉴于当前的工作安排,将跟踪redsktop项目的进展,以提炼功能为我所用和完善现有程序。

二、概述

1 版本功能说明:

RDP协议在终端服务推出后已有四个版本,4.05.05.15.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

0x03eb0x03ee

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用C语言实现远程桌面协议RDP)需要具备一定的编程技能,步骤如下:1)实现RDP协议的传输层,使用TCP/IP协议实现数据传输;2)实现RDP协议的会话层,使用TLS/SSL实现安全会话;3)实现RDP协议的表示层,使用RDP视图、RDP控制、RDP输入和RDP图形来显示远程桌面的内容;4)实现RDP协议的应用层,使用RDP视频、RDP音频、RDP文件转换和RDP打印等功能。 ### 回答2: 要用C语言实现RDP远程桌面,需要以下步骤和功能: 1. 首先,需要创建一个RDP客户端程序来连接远程计算机。这个客户端程序需要能够与RDP服务器建立连接,并进行身份验证。 2. 在客户端和服务器之间建立TCP/IP连接,以便在网络上进行通信。 3. 在客户端和服务器之间建立可靠的数据传输协议,以确保数据的准确性和完整性。在RDP中,使用的是RDP协议,它可以保证可靠的数据传输。 4. 实现键盘和鼠标输入的传输。将客户端接收到的键盘和鼠标输入传输到服务器上,以便远程控制服务器。 5. 在服务器端实现图形绘制和显示功能。这包括将服务器上的图像绘制到客户端的屏幕上,以实现远程桌面的显示。 6. 实现音频传输。如果需要在远程计算机上播放音频或录制音频输入,需要将音频数据从客户端传输到服务器。 7. 要实现远程剪贴板功能,使得客户端和服务器之间可以互相复制和粘贴文本或文件。 8. 实现远程文件传输功能,使得客户端可以上传和下载文件到服务器上。 9. 要对连接进行加密,以保护数据的安全性和隐私。 10. 最后,需要实现断开连接和退出等功能,以便安全地关闭RDP连接。 总之,通过这些步骤和功能,可以用C语言实现RDP远程桌面,实现远程控制、文件传输和音频等功能,方便用户在远程计算机上进行操作。 ### 回答3: 使用C语言实现RDP(远程桌面协议)可以通过使用RDP库来实现。下面是一个大致的步骤: 1. 首先,需要使用C语言连接到RDP服务器。可以使用RDP库来建立与服务器的连接,并进行身份验证。 2. 连接成功后,可以通过发送RDP协议中的命令和数据来控制远程桌面。这些命令和数据可以使用C语言的网络编程功能(如套接字)发送到RDP服务器。 3. 要实现远程桌面的显示,需要接收和解析RDP服务器发送的屏幕数据。可以使用C语言的图形处理库(如SDL)来创建一个与远程桌面相同分辨率的窗口,并在窗口中显示接收到的图像数据。 4. 接收到的图像数据可以进行解压缩和解码,以便将其转换为屏幕上的像素。可以使用C语言中的相关库和算法来实现图像解压缩和解码的功能。 5. 在显示远程桌面的同时,还可以在本地模拟用户的输入操作。可以使用C语言的系统api来模拟鼠标和键盘的输入,将用户的操作发送给RDP服务器。 6. 最后,关闭连接时,需要通过发送RDP协议中的断开连接命令来关闭与服务器的连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值