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。
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服务器需要用到的。
mc:同上,不再多说
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.so2.libxrdp
xrdp与客户端通信的代码,fix me。包含了对客户端的rdp连接的解析,我个人认为就是用来处理rdp协议栈的,fix me。最终编译成动态链接库libxrdp.so3.xrdp
xrdp主程序的文件夹,这个是我们关注的核心。4.rdp
rdp插件,这个下文仔细讲。最终编译成动态链接库librdp.so5.freerdp1
另一个功能更强的rdp插件,依赖于freerdp项目,这个下文仔细讲。最终编译成动态链接库libfreerdp1.sofreerdp是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
相关文章推荐
- xrdp开源项目的代码分析
- 开源项目kcws代码分析--基于深度学习的分词技术
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(十四):ASP.NET2.0实现无刷新客户端回调的Callback机制及例子代码下载
- 开源项目kcws代码分析--基于深度学习的分词技术
- 短视频 | 问答开源项目解读之整体代码流程和问题分析
- 开源APP项目代码分析(3)- 生活记事本
- 对搜索引擎开源项目的代码分析——索引(1)
- Android 开源项目代码分析思路
- 开源APP项目代码分析(1)- OpenEyes、Plaid、GitHot
- 对搜索引擎开源项目的代码分析——文档抓取
- 开源APP项目代码分析(4)- 天气类
- 对搜索引擎开源项目的代码分析——索引(2)
- DIOCP开源项目 API代码的封装和流程分析
- 开源项目kcws代码分析--基于深度学习的分词技术
- 开源APP项目代码分析(2)- Owspace和MusicDNA
- 开源项目Jchat 编译以及源码分析
- 最值得阅读学习的 10 个 C 语言开源项目代码
- 代码阅读——十个C开源项目
- discuz论坛apache日志hadoop大数据分析项目:清洗数据核心功能解说及代码实现
- 开源项目GridViewWithHeaderAndFooter使用和源码分析