rdesktop程序结构分析

上传人:野鹰 文档编号:3157432 上传时间:2017-07-31 格式:PDF 页数:11 大小:329.38KB
返回 下载 相关 举报
rdesktop程序结构分析_第1页
第1页 / 共11页
rdesktop程序结构分析_第2页
第2页 / 共11页
rdesktop程序结构分析_第3页
第3页 / 共11页
rdesktop程序结构分析_第4页
第4页 / 共11页
rdesktop程序结构分析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《rdesktop程序结构分析》由会员分享,可在线阅读,更多相关《rdesktop程序结构分析(11页珍藏版)》请在金锄头文库上搜索。

1、广东工业大学-物理与光电工程学院目录概论 .11.RDP网络协议 .21.1.RDP4协议 .21.2.RP5协议 .32.rdesktop结构分析 .42.1.Rdesktop源码文件介绍 .42.2.rdesktop函数调用层次 .52.3.rdesktop主程序执行过程 .72.4.STREAM数据结构 .8广东工业大学-物理与光电工程学院1概 论本文简要介绍 RDP协议和对 rdesktop1.7.0程序结构作一些分析。在 RDP协议一节里 , 将对 RP4和 RDP5作一些介绍 , 但在 rdesktop程序结构一节里并不区分 RDP4和 RDP5版本。因为网上关于 rdesktop

2、的资源非常少,对于 rdesktop笔者也是在探索阶段 , 看了半个月的代码 , 对 rdesktop的软件结构也有了一定的了解 。 要完全读懂 rdesktop所有代码 , 目前 , 对于笔者来说并不现实 。 本文仅 对rdesktop的 1.7.0版 本 的 源 码 结 构 进 行 分 析 , 不 涉 及 任 何 具 体 实 现 的 问 题 。 最 后对 rdesktop中最重要的 STREAM结构作简单介绍。广东工业大学-物理与光电工程学院21.RDP网 络 协 议rdesktop软件是基 于 RDP协议的 , RDP是微软制定的一套远程桌面协议标准 ,但 因 为 它 不 是 一 个 开

3、 放 的 协 议 , rdesktop的 开 发 人 员 采 用 逆 向 工 程 来 研 究 RDP协议。在 windows2008系统中我们已经看到,微软的 RDP协议已经有了 7.1版本 , 但 rdesktop目 前 只 能 支 持 RDP5版 本 的 协 议 。 在 介 绍 rdesktop源 码 结 构 之前,先介绍一下 RDP的网络协议栈,这是 rdesktop实现的基础。和大多数的网络协议一样 , RDP协议由多个层次组成 。 图 1.是 RDP4和RDP5协议栈的层次结构图。1.RDP4协 议协议栈的最底层 TCP连接层 , 主要是从客户端连接到服务器端的 3389端口 。RD

4、P协议建立 在 TCP/I协议之上 , 客户端与服务器端是通过网络进行数据传输 ,此层主要是建立网络的连接。RDP4协议栈 RDP5协议栈图1.RDP协议栈层次结构广东工业大学-物理与光电工程学院3在 TCP层之上是 ISO层 , 此层发送 ISO数据包 。 它表示 RDP数据的正常连接通信 。并 提供了一种能在普通 TCP应用之上运行的标准。在 ISO层 上 是 多 点 通 信 服 务 ( MultipointComm unicationServices) 层 , 也 称为 MCS层,此层用于定义多个虚拟通道, 用以拆分 表 示不同虚拟通道的数据 。在 RDP5里面 , 允许多个虚拟通道的应

5、用 , 例如发送剪切板通道和声音数据通道等。 MCS层之上的是通用会议控制 ( GenericConfernceControl) , 此层在协议实现的时候几乎是不可见的,对用户来说是透明的。安全层,也叫 SEC层,它对 MCS层传送的数据进行加解密。协 议 栈 的 最 顶 层 是 RDP的 应 用 层 。 应 用 层 定 义 了 图 像 数 据 如 何 传 送 到 客 户端,鼠标和键盘数据如何传送到服务器等。 1.2RDP5协 议从 图 1.的 对 比 中 , 明 显 看 出 , RDP4和 RDP5协 议 层 次 并 不 相 同 , 微 软对 RDP5中作了重新定义,使得 RDP5和 RP4

6、之间有些差异。 RDP5的网络协议 栈只有 3层 。 RDP5把 RDP4协 议中的 ISO、 MCS和 GC层 取消,取而代之的是定义了一个更加紧凑的数据包格式。值得注意的是, RDP5协议可以看作是 RDP4协议的一种改进,但并不说 明RDP5协议中的数据包都是完完全全的 RP5类型 , 至少在建立连接阶段其数据格式就跟 RDP4完全一样 , 所有从客户端到服务器的数据包就完全是 RDP4的格式 。 RDP5数据包格式只用于处理从服务器端传送过来的图像格式数据 。 其它通道(剪切板、声音等)仍然使用 RDP4类型的数据包。一 个 有 趣 的 现 象 是 使 用 旧 协 议 ( RP4) ,

7、 理 论 上 可 以 通 过 无 TCP/I连 接 运行 RDP, 只 需 要 重 写 服 务 器 和 客 户 端 的 一 小 部 分 代 码 就 可 以 了 。 但 用 RDP5数据包已经无法实现这样的功能,因为很多抽象层已经地剥除。广东工业大学-物理与光电工程学院42.rdesktop结 构 分 析为了让 rdesktop的维护工作变得更容易 , 这里对 rdesktop的内部工作机制进行一个描述。 2.1Rdesktop源 码 文 件 介 绍本节对 rdesktop1.7.0源码中各个文件的作用作简单的说明 ( 部分内容是对外文资料的直接翻译,译文可能有误,仅供参考 ) 。rdeskto

8、p.c本文件包含了 m ain函数的入口 , 对命令行参数进行分析和处理 ,初始化窗口等,最后进入主程序的循环。xwin.c包含了连接到 XServer图形接口的代码。xproto.hX窗口相关函数的声明。rdp.c包含了发送和接收 RDP数据包的代码 , 大部分代码只在建立协议的时候会调用, rdp层协议。rdp5.c包含处理 RDP5数据包的代码, rdp层协议。mcs.c包含分析和发送 MCS数据包的代码, m cs层协议。iso.c包含分析和发送 ISO数据包的代码, iso层协议。tcp.c包含发送和接收 TCP数据包的代码, tcp层协议。ewmhints.c包含窗口管理器的通信程

9、序 代码。licence.c包含许可证( license)处理函数。orders.c包含从服务器处理次序(图形数据)的代码。parse.h包 含操作 STREAM结 构体的宏(同样在本文件定义 ) 。 这些宏主要用于从服务器读写数据,或者向服务器读写数据。 proto.h声明各个源码文件中的公用函数原型。types.h定义了 rdesktop中公共数据类型。scancodes.h包含了键盘相关的定义。secure.c包 含 了 编 解 码 相 关 的 代 码 , 例 如 分 析 公 共 密 钥 和 对 数 据 进 行 编 码和解码。 xkeymap.c用于 X窗口系统的键盘映射。广东工业大学-

10、物理与光电工程学院5bitmap.c包含对来自服务器的位图 ( 例如图标和其它小图像 ) 进行解压的函数。 cache.c包含位图、字体、桌面和指针等缓存函数。channels.c当 RDP5通道上有数据时,注册的回调函数被调用。cliprd.c主要是 Xwindows系统和微软 Windows之间 , 或者不同的 rdesktop会话之间的剪切板数据处理。 constants.h定义了 RDP的各种常量。disk.c/disk.h磁盘重定向相关定义和函数。lspci.c支持 Matroxlspci通道。mpc.cRDP解压相关函数。printer.c打印机相关的函数。printfercach

11、e.c打印机缓冲相关函数。pstcache.c持续的位图缓冲相关的函数。rdpsnd.h/rdpsnd.c音频相关定义和函数声明 /音频通道处理函数。rdpsnd_alsa.c音频通道处理函数 ALS驱动相关函数。rdpsnd_dsp.h/rdpsnd_dsp.c音频 DSP相关函数。rdpsnd_libao.c音频通道处理函数 libao驱动相关函数。rdpsnd_oss.c音频通道处理函数 开放音频系统相关函数。rdpsnd_sgi.c音频通道处理函数 SGI/RIX相关函数。rdpsnd_sun.c声音通道处理函数 SUN相关处理函数。scard.h/scard.c智能卡支持的相关定义和

12、函数。seamles.h/seamles.c无缝支持 Windows的相关函数。serial.c串口支持的相关函数。sl.h/sl.c安全套接字抽象层相关定义和函数。xclip.c剪切板相关函数。2.rdesktop函 数 调 用 层 次从图 1中可以知道 , RDP协议的基本层次结构 , 从顶层到底层的结构分别为 :RDP数据层 ( rdp) 、 加密解密层 ( sec) 、 多点通信服务层 ( m cs) 、 ISO数据层 ( iso)广东工业大学-物理与光电工程学院6和 TCP网络连接层 ( tcp) 。 rdesktop也按这样的层次来调用的 , 如 图 2.1所示 。图2.1rdes

13、ktop函数调用层次在 源 码 中 很 多 地 方 都 是 按 照 rdp_ sec_ m cs_ iso_ tcp_的 层 次 进 行调用 , 像 rdp的连接函数 、 初始化函数 、 还有断开连接等操作都是按这样的层次进行调用 。 例如在 rdesktop的源码中 rdp.c文件中有 rdp_connect函数 。 RDP的连接过程如下所示: rdp_connect sec_connect m cs_connect iso_connect tcp_connect从上面的箭头方面可以知道 , rdp_connect要调用 sec_connect, 而 sec_connect要调用 m cs_connect等,依此类推。 RDP的连接过程就是这样从顶层到底层 , 按照调用次序一层层地调用相应层的连接函数实现的。 类似地, RDP初始化和断开等也是按照类似的层次进行调用初始化:sec_init m cs_init iso_init tcp_init断开连接: rdp_disconnect sec_disconnect m cs_disconnect iso_disc

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号