APP下载

基于SOCKET技术的几种远程控制功能的实现

2010-09-19刘玉宝祝海英张良和

长春大学学报 2010年8期
关键词:服务端鼠标进程

刘玉宝,祝海英,张良和

(1.长春大学 软件学院,吉林 长春 130022;2.长春职业技术学院 信息技术分院,吉林 长春 130033)

基于SOCKET技术的几种远程控制功能的实现

刘玉宝1,祝海英2,张良和1

(1.长春大学 软件学院,吉林 长春 130022;2.长春职业技术学院 信息技术分院,吉林 长春 130033)

远程控制可以作为远程维护,远程办公等应用领域的支持工具。本系统采用VC++进行设计和制作,控制端与服务端连接后实现被控端的服务控制功能、进程管理功能、屏幕截取及控制功能,以便进行计算机远程管理和维护。

远程控制;主控端;被控端;C/S模式

0 引言

远程控制的原理很简单:本地机直接启动运行的主控端程序,并拥有与被控端主机使用者相同的权限。因此,如果能够启动服务器端的被控端程序,就可以使用相应的客户端程序直接控制主机。也就是说,客户端就相当于一个超级用户,可以直接控制远程服务端计算机。

1 远程控制原理

简单远程控制系统由主控端和被控端两部分组成。主控端用于实施各种对连网计算机的监控操作,被控端对于接收到的数据进行分析,解释并执行[1],在Windows环境下即可实现。本系统采用面向连接的服务实现控制信息的传输。面向连接服务器处理的请求往往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器。使用面向连接的套接字编程,可以通过图1来表示。其客户端和服务端的连接的连接过程如下:

图1 面向连接的服务时序图

首先,应该是客户端的应用程序先启动,并启动接收数据的线程。等待接收一串数据。

服务端将数据发送给指定IP地址的客户端。客户端端接收到该数据后,保存该申请远程服务的客户端系统的信息。通过接收的SOCKET可以提取出发送请求的服务端的IP地址和开放的端口号。用头插法将数据存储在动态的链表,完成后重新进入数据接收状态,等待其他的需要申请远程服务的服务端主机发送数据消息。

客户端再向服务端发送一串数据给服务端,表示客户端将和服务端建立TCP的连接。服务端收到数据后对本机地址端口号的绑定。绑定完成后发送一串数据给客户端,并进入监听状态,随时准备建立TCP连接,并启动一个线程来接收建立好的TCP连接后的数据信息。客户端收到一串数据后。便初始化SOCKET的数据信息,并通过CONNECT函数建立TCP连接。系统连接成功,进入远程控制状态。

2 指令数据结构的设计

客户端发送的数据是指令数据,指令数据只需要一个数字就行了。服务端接收到客户端发来的指令数据,只需分析出其中指令数字就行了,并按指令数字代表的意义执行Windows指令管理本机系统就行了。同时将处理的数据结果发送给客户端。客户端收到的数据,执行指令后处理得到的数据,因此建立一个的结构体和宏指令,如图2所示。来代表发送的指令和执行该指令后得到的数据。每次客户端和服务端通信时都发送一个TagCommand结构体大小的数据。服务端通过wCmd来确定执行的指令,客户端通过wCmd来确定收到的数据是关于哪方面的,对接收到的指令数据进行解析,执行指令,完成远程控制的任务。

图2 指令数据结构

3 远程服务控制的实现

3.1 注销服务端系统的实现

定义一个DWORD类型的变量dwVersion;通过GetVersion()来获得当前服务端系统的版本信息。然后执行ExitWindowsEx(EWX_LOGOFF,0)函数,实现服务端主机的注销。

3.2 关闭服务端系统的实现

定义一个DWORD类型的变量dwVersion;通过GetVersion()来获得当前服务端系统的版本信息。如果系统版本小于0x80000000,定义一个HANDLE类型的变量hToken,定义一个TOKEN_PRIVILEGES类型的变量tkp。否则执行

ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0)函数。

3.3 重启服务端系统的实现

定义一个DWORD类型的变量dwVersion;通过GetVersion()来获得当前服务端系统的版本信息。如果系统版本小于0x80000000。否则执行ExitWindowsEx(EWX_FORCE|EWX_REBOOT,0)函数。

3.4 锁定/解锁服务端系统鼠标的实现

定义一个CPoint类型的变量pt,用GetCursorPos(&pt)获取当前服务端系统中鼠标的位子[3],用SetCur-sorPos(pt.x,pt.y)来重置鼠标在服务端桌面上的位置,定义一个CRect类型的r变量。将该矩形的左上角位置设置为鼠标的X坐标值,右下角位置设置为鼠标的Y坐标值。其实该矩形框就是一个点的位置值。再通过调用ClipCursor(&r);函数,限制鼠标只能在该区域活动。即实现了鼠标的锁定。通过调用系统的函数并将当前鼠标活动区域限制设置为NULL,即可实现释放鼠标的功能。

4 远程进程管理的实现

4.1 服务端进程获取

首先通过循环结构查找确定在系统中运行的进程的数量,然后通过调用自定义函数来打开访问服务端系统进程的访问权限,获得进程访问令牌句柄,再取得DEBUG权限的LUID,根据参数,打开或关闭相应权限,再调整权限,最后关闭句柄[2]。访问系统运行进程权限打开后,便可通过已知的进程数量,用循环通过访问进程的PID来获取一个进程的信息,在每个for循环将该进程的数据信息发送给客户端。

客户端收到一串指令数据后,将其放在全局变量中,通过分析接收到的数据。如果是一个进程的数据信息,就提取这串数据中的进程数据信息,将该进程数据信息用头插法将其插入到客户端中获取的服务端的进程链表中,同时显示在客户端界面上。

服务端通过获得的进程的数量循环地发送每个进程的信息,客户端不断的接收进程的数据信息,并将其动态保存。便完成了服务端进程的获取。

4.2 终止服务端的进程

服务端接收到终止进程控制数据后,分析出指令如果是KILLPROCESS,便循环查找出该PID的进程。打开该进程的访问入口,然后终止该进程,关闭进程的访问句柄。

5 屏幕控制的实现

为了保证信息传输的稳定,在客户端和服务端都重新各自建立一个进程,来监听和处理屏幕控制所需要的数据。而新建立的TCP连接,是在原TCP连接的端口号加1,连接双方的IP地址不变。为此在客户端和服务端都新建了两个socket类型的变量,和SOCKADDR_IN类型的变量。来保证通信的质量。通过位图的数据结构如图3所示对位图数据进行分析和处理。

图3 位图数据结构图

先获取当前桌面的HWND,然后在通过这个HWND获取当前窗口的HDC,调用GetWindowRect(hwnd,&rc);函数获取当前窗口的大小,最后用HBITMAP类型的变量hbmp赋值::CreateCompatibleBitmap(hsrc,570,428);画出桌面的图像,再来设置图像数据的信息[4]。由此而得到了服务端系统桌面图像的位图。用bitmap.Attach(hbmp);加载位图的句柄来实现对桌面位图数据的访问,再将屏幕图像的发送给客户端。通过该位图的句柄来访问位图的属性,结构大小,像素。完成屏幕图片头信息的保存,然后将位图颜色表的信息拷贝到位图指针的数据区中,完成位图颜色信息的保存,最后将每个像素值的数据保存[5]。完成上述数据的保存后,便将三个位图信息依次发送给客户端,每发送一次延时0.1秒,这是为了防止客户端接收到数据发生阻塞而不能完整的接收一个图片的信息。

客户端接收到服务端发来的数据后依次存放。其中需要根据图像的信息来计算图像的像素数据所需要的空间,然后动态的开辟所需大小的空间。将位图的像素信息保存在该区域内。再分析接收到的位图的数据信息,并将其显示在客户端显示区域里。

6 结论

系统实现了网络中数据信息的传输和对系统的基本的远程控制。通过调用Windows API编程、利用TCP/IP协议、采用C/S模型实现了几种远程控制功能。系统的架构和设计到最后实现,采用宏定义作为指令信息进行传输和控制,系统实现中涉及到,动态链表,多级指针,递归查找的算法……以及整个远程控制系统的架构都为以后进一步的研究远程控制提供了一定的思路和借鉴意义。但是仍然存在许多需要改进的地方,入系统运行效率不高;只能实现局域网内的远程控制,还不能实现跨网的远程控制,需要更进一步改进和完善。

[1] 梁洋洋.Visual C++黑客编程揭秘与防范[M].北京:人民邮电出版社,2009.

[2] 张友生.远程控制编程技术[M].北京:电子工业出版社,2002.

[3] 求是科技.Visual C++程序设计与开发技术大全[M].北京:人民邮电出版社,2005.

[4] 谢凤英,赵丹培,姜志国.Visual C++数字图像处理[M].北京:电子工业出版社,2008.

[5] Stanley B.Lippman,Josee Lajoie著,潘爱民,张丽译.C++Primer[M].北京:中国电力出版社,2006.

责任编辑:吴旭云

The implementation of some remote control functions based on SOCKET technology

LIU Yu-bao1,ZHU Hai-ying2,ZHANG Liang-he1
(1.Software College,Changchun University,Changchun 130022,China; 2.School of Information Technology,Changchun Vocational Institute of Technology,Changchun 130033,China)

Remote control system can be used as a supporting tool for remote maintenance and remote office,which uses VC++to design and program.It realizes the functions of service control,process management,screen capture and control by connecting client and control terminal so as to achieve remote management and maintenance.

remote control;master control;passive control;C/S model

TP311.1

A

1009-39072010)08-0084-04

2010-06-21

刘玉宝(1975-),男,吉林榆树人,讲师,博士研究生,主要从事嵌入式系统,智能控制,软件工程等方面的研究。

猜你喜欢

服务端鼠标进程
Progress in Neural NLP: Modeling, Learning, and Reasoning
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
社会进程中的新闻学探寻
俄罗斯现代化进程的阻碍
摸清黑客套路防范木马侵入
45岁的鼠标
超能力鼠标