您的位置:首页 > 编程语言

xrdp开源项目的代码分析-1

2013-03-20 16:18 351 查看
首先要说明情况,我分析的代码基于xrdp-2012-5-11日,而不是最新的代码,最新的代码稍有改动,但是主体的思想没有变化

xrdp-2012-5-11日代码的下载地址:https://github.com/FreeRDP/xrdp/tree/c50425032c9da4950d41845c668e4056325e7737,当然下载之后的代码真正运行起来,那必须在linux下,我使用的linux是centos 5.7 下载地址是:http://mirror.bit.edu.cn/centos/ 这个是北理工的开源软件库,教育网的同学们会下的快一点。linux的开发环境,我用的是eclipse,即eclipse cdt,效果很不错。至于怎么搭建环境,我就不再赘述,百度/google都很方便就能得到结果。

总体的架构很难现在就给大家画出来,这个还得慢慢来,我准备先分析下每个源代码文件的每一个函数的作用,先从底开始,然后再开始分析整个流程。

解压xrdp后,会看到以下几个目录common,libxrdp,xrdp,rdp,freerdp,xup,vnc,xorg。

1. common

xrdp项目基于的common库,封装了系统调用,包括文件,线程,socket通信,信号量,事件等等。最终编译成动态链接库libcommon.so

2.libxrdp

xrdp与客户端通信的代码,fix me。包含了对客户端的rdp连接的解析,我个人认为就是用来处理rdp协议栈的,fix me。最终编译成动态链接库libxrdp.so

3.xrdp

xrdp主程序的文件夹,这个是我们关注的核心。

4.rdp

rdp插件,这个下文仔细讲。最终编译成动态链接库librdp.so

5.freerdp1

另一个功能更强的rdp插件,依赖于freerdp项目,这个下文仔细讲。最终编译成动态链接库libfreerdp1.so

freerdp是xrdp的主项目,我认为先有freerdp,再有xrdp,同宗同源。这里不妨解释一下,

freerdp的初衷,是做一个linux下的远程桌面的客户端程序。它大量参考了linux下经典的远程桌面客户端rdesktop

,随着freerdp的不断应用,人们提出新的需要,即我能不能在windows下通过远程桌面连接(mstsc.exe)连接linux服务器?于是产生了xrdp这个项目。

xrdp的初衷,是解决了windows机器通过标准远程桌面(mstsc.exe)连接linux机器,实现图形化的交互操作。其实在以前,windows机器要想图形化的运行维护linux机器必须安装Xmanager,Xming,通过X11协议访问,或者安装VNC协议的客户端如:VNCviewer,tightVNC,同时还需要在linux下,配置vnc服务器程序。总的来说,xrdp还是方便些,毕竟它只需要在linux服务器上安装一下windows客户端就不再需要安装任何软件就能访问linux机器了。



但是事物总是发展的,能不能让人们通过xrdp,跳转到另一台机器上,而不仅仅是本机?那么就有了现在的xrdp。



从上面这张图看,安装了xrdp程序的linux服务器初具代理转发的功能。

librdp.so libxrdpfreerdp1.so 的作用就是连接不同后台设备,使用不同的插件。librdp.so libxrdpfreerdp1.so是连接windows服务器需要用到的。

6.xup

xup提供了对于X11后台服务器的连接访问插件。其实X11就是linux下图形显示的标准协议,fix me。vnc也是要基于X11的。编译出来的是libxup.so。

7.vnc

vnc提供了对于安装了vnc服务的服务器的连接访问插件。编译出来的是libvnc.so。

8.xorg

X11协议代理需要用到的,其实主要功能就是将改写xorg-server程序,将其适用于xrdp,具体以后再说。编译出来为X11RDP,可以独立运行的

9,其他文件夹

sesman:session manager,对于X11协议xrdp使用sesman来进行管理,但是做堡垒机的过程中,我把它的核心代码扣出来了,填写到xrdp_process.c xrdp_mm.c等等文件里了

mc:同上,不再多说

代码间的互相调用:fix me

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: