基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx

上传人:b****8 文档编号:22578395 上传时间:2023-02-04 格式:DOCX 页数:18 大小:213.81KB
下载 相关 举报
基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx_第1页
第1页 / 共18页
基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx_第2页
第2页 / 共18页
基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx_第3页
第3页 / 共18页
基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx_第4页
第4页 / 共18页
基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx

《基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

基于CS模式的局域网监控系统客户端的设计与实现Word文件下载.docx

3.1系统流程图3

3.2界面设计4

3.3功能设计6

4实验结果9

4.1发送信息9

4.2屏幕抓取9

5遇到的问题及解决方法9

6软件的优点和缺点10

参考文献11

引言

(1)背景当今社会,让学生如何正确使用网络正困扰着越来越多的老师,将学校网络接入

互联网的意义已无需争辩,但有时不免产生许多令人头疼的问题:

许多学生在上机课时泡在网上,或通过MSN、QQ和朋友聊天,或查看与学习不相关的网站,学习无效率可言;

在公司里员工将公司当作网吧,工作也没效率,甚至于泄露公司的机密资料。

为了避免这些状况发生,也为了更有效地监控局域网的工作状况,满足计算机局域网用户的各种需求,同时因为Delphi具有强大的网络功能,所以我们选择了基于Delphi的局域网监控软件的课题。

(2)远程控制的发展史及前景

起初,使用远程控制软件,是为了让PC用户在离开办公室时能访问其台式PC硬盘中的信息,甚至可以通过其台式PC访问企业网络资源。

今天,许多企业和增值分销商正在把远程控制能力作为有效的技术支持工具。

很多网络管理员都采用这类软件对局域网进行管理,或者在家中更新自己网站的内容。

这类软件对于出差在外的商务人员用处非常大,因为他们可以随时提取自己家里计算机中的数据和资料。

远程控制软件在计算机远程教学和培训中也发挥了不少的作用,使身处异地的学生能够与老师进行实时交流,犹如坐在同一教室一般。

近年来,黑客技术不断成熟起来,对网络安全造成了极大的威胁。

黑客的主要攻击手段之一,就是使用远程控制技术,渗透到对方的主机系统里,从而实现远程操作目标主机。

其破坏力之大,是绝不容忽视的。

随着网络技术的进一步发展,网络速度越来越快,家庭办公将成为未来的时尚,远程技术支持将逐渐占据技术支持的主流。

远程教学和培训也将快速发展,企业规模将迅速扩大。

所有这些发展都为远程控制软件提供了一个广阔的天地。

(3)已有的成果和先进技术如灰鸽子远程控制软件,对被控机器进行的操作包括:

文件管理、获取系统信息、

剪贴板查看、进程管理、窗口管理、键盘记录、服务管理、共享管理,提供MS-Dosshell,提供代理服务,注册表编辑,启动telnet服务,捕获屏幕,视频监控,音频监控,发送音频,卸载灰鸽子……可以说,用户在本地能看到的信息,使用灰鸽子远程监控都能看到。

还有其他软件比如:

Netfinity5.x+LCCM2.51,引起广大用户反响的国内软件YAI等,都是功能强大的远程控制软件。

(4)软件内容和采用的方法我们现在所研究的系统只是最基本的局域网的远程控制,其主要功能包括:

自动

搜索主机,监控受控端计算机的屏幕,发送信息,在本地操作受控计算机,关闭、重启受控计算机、锁定鼠标、黑屏等等。

本软件的特点在于使用WinSockAPI函数和网络远程控制技术实现对局域网中多台计算机的管理、维护和监控。

(5)软件的组成及运行环境本系统由服务器(监控端)程序和客户端(被控端)程序组成,只要客户机和服务

器都连上网络(都支持TCP/IP协议)就可以工作。

Control.exe装在服务器(监控端)上,监控端执行程序。

Undercontrol.exe装在客户端(被控端)上,被控端后台监控程序,运行时该界面自动隐藏。

本软件在WindowXP,Delphi6.0下运行通过。

1技术基础

1.1远程控制

我们所说的远程控制指局域网内的远程控制而言,远程控制是管理人员在主机通过网络,连接远程计算机,通过本地计算机对远程计算机进行管理和维护的行为,当操作者使用主控端电脑控制被控端电脑时,就如同坐在被控端电脑的屏幕前一样,远程控制技术的工作方式采用C/S(客户机/服务器)模式,控制计算机与被控计算机连接成功后,通过网络的互联协议(TCP/IP)进行远端控制。

控制机好比一个超级用户,可以直接控制远端计算机。

远程控制将被应用于家庭办公、远程教学、企业内部管理等领域。

其控制的过程一般是先在主控端电脑上执行服务器程序,像一个普通的客户一样向被控端电脑中的客户端程序发出信号,建立一个特殊的远程服

务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行,我们称这种远程控制方式为基于远程服务的远程控制。

1.2WinsockAPI

Win32应用程序接口(API),简称为Win32API,是用来编制控制Windows操作系统的编程接口,由一组包含在动态链接库中的函数和子程序组成,通过它们可以编程访问操作系统的功能。

在该软件设计中涉及很多Windows底层操作,软件的主要功能皆由相应的Win32API函数来实现。

网络编程技术是本软件设计中用到的主要技术之一。

在Windows操作系统环境下应用程序通过编程接口访问TCP/IP协议集的应用程序编程规范称之为WinSockAPI。

WinsockAPI提供了一系列的系统调用,使用这些系统调用可以实现TCP、UDP、ICMP和IP等多种网络协议之间的通信;

它采用客户机/服务器的通信机制,使网络客户机方和服务器方通过各自的Socket接口形成—个完整的套接字,如图1-1所示。

在客户机与服务器之间建立通信信道,实现网络间的连接管理,并可进行数据交换。

套接字是网络通信的基石,是支持TCP/IP协议的网络通信的基本操作单元;

可以将套接字看作不同主机间的进程进行双向通信的端点;

一个套接字是通信的一端,在这一端上可以找到与其对应的一个名字;

一个正在被使用的套接口都有它的类型和与其相关的进程;

套接字存在于通信领域中。

Delphi对原来的WindowsSocketAPI进行了一系列的封装,而本软件的通信就是用Tclientsocket控件和Tserversocket控件这

1

两个控件来完成的。

服务器客户机

Socket()

Bind()

Listen()

Accept()

Connect()

Recv()

Send()

阻塞,等待客户数建立连接请示数据

处理服务请求

应答数据库

Close()

图1-1socket接口示意图

在windows系统中利用socket进行网络通信有两种主要方式:

第一种是流方式

(Streamsocket),也称面向连接方式(用于实现TCP协议),这种方式下,两个应用程序之间先要建立一种虚拟的连接,Streamsocket提供了一种可靠的面向连接的数据传输方法,数据无差错、无重复地发送,且按发送顺序进行接收;

第二种是数据报方式

(Datagramsocket),又称无连接方式(用于实现UDP协议),在进行数据传送以前两端的程序不需要任何沟通,但没有提供可靠的、有次序的、无重复的保证,数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱。

本软件使用Streamsocket实现数据传输。

1.3编程工具

Delphi集中了VisualC++和VisualBasic两者的优点:

容易上手、功能强大,特别是在界面设计、网络编程等方面更有其独特的优势。

所以选用Delphi作为开发工具。

2

2设计思想(客户端)

本软件是由Delphi编写的,如图1-1所示,主要运用Delphi中的Tclientsocket控件和Tserversocket控件来实现客户端与服务器的连接,以及相互之间数据的发送和接收。

2.1客户端(被控端)监听

客户端(被控端)在某个地址的某个端口(如2058)监视对服务的请求,也就是说被控进程一直处于休眠状态,直到一个控制端对这个服务的地址提出连接请求,被控端如监听到控制端Socket的连接请求时,被控程序被唤醒并且对控制端的请求做出适当的反应,即响应控制端Socket的请求而建立一个新的Socket句柄与控制端连接。

2.2客户端(被控端)连接

当客户端Socket接收到服务器Socket的连接请求后,就把客户端Socket的描述信息发给服务器一旦服务器确认了此描述,连接就建立了。

(本软件在被控端程序运行时socket控件的active属性为true,所以只要接收到连接请求就自动连接上了)建立连接后客户端通过辨别服务器发过来的消息,分别进行响应不同的操作,也就实现了远程控制的功能。

ServerSocket的属性设置:

·

Active,属性设为true;

Port,是通信的端口,必须设置。

在软件中设置为2058;

ServerTypt,服务器端读写信息类型,设置为stNonBlocking表示异步读写信息,软件中采用这种方式。

其它属性采用默认设置即可。

3客户端(被控端)设计过程

3.1系统流程图

图3-1为客户端(被控端)程序的系统流程图,为了达到远程控制的目的,就必须将被控端软件隐蔽起来,所以被控端的程序只是后台监控程序,并且没有退出程序,也就是说程序一旦运行只有通过关闭进程的方法才能退出程序。

控制端和被控端的socket连接起来后也就形成了一个通信通路,控制端发送一个命令,被控端通过socket的receivetext函数将命令从连接中接收出来放到字符串变量S中,再由S中不同的字符串来判断响应哪个事件,然后通过调用不同的API函数来实现控制功能。

3

开始

欢迎界面

3.2界面设计

图3-1系统流程图

客户端的界面主要包括三个:

启动时的欢迎界面,程序主界面和黑屏界面。

3.2.1启动时弹出的欢迎界面启动程序后,在主导界面出现之前,弹出的一个欢迎界面,停留数秒后软件进入

主导界面,这个画面的另外一个用处是在处理耗时进程时,为用户展示了一幅优美、舒心的图像,如图3-2。

实现欢迎界面是在其他窗体之前最先弹出,在Undercontrol.dpr单元中begin后使友好界面窗体最先显示,其他窗体创建之后,为友好界面设置一个停留时间,方法

4

是调用Sleep(milliseconds)函数使程序的执行延时给定的时间值。

函数功能是:

暂停当前的进程milliseconds毫秒。

如软件中为sleep(3000),延迟3000毫秒后隐藏欢迎窗体,并释放其占用的内存资源,但是如果延迟时间较长的话程序看起来好像暂时死机,因为程序不能够响应延时期间发生的其他消息。

3.2.2程序主界面

图3-2欢迎界面

把一个seversocket控件放到form上,则应用程序就变成了一个TCP/IP客户端,设置Tserversocket的port属性指定的端口号和服务器port的端口号一致(本软件为2058),在窗体创建时把serversocket的Active属性设为true,则客户端(被控端)在启动后就会自动进入监视状态。

为了达到远程控制的目的,就必须将被控端软件隐蔽起来,作为一个后台监控程序,所以其界面要隐藏,并且在任务栏、任务管理器中也不能显示。

1)实现在任务管理器中隐藏:

在frmform窗体的oncreate事件(窗体创建)中调用ShowWindowAsync(Application.Handle,SW_HIDE)函数,它的功能类似于ShowWindow函数,控制可见性,第一个参数为窗口句柄,但它立即返回(不用等待目标程序返回隐藏信息)。

并且它有一个副作用:

从任务列表中移除目标窗口,将第二个参数设为hide。

所以调用该函数可以实现在任务管理器(Ctrl+Alt+Del)中隐藏程序。

2)在任务栏里隐藏程序:

将隐藏的应用程序窗口设为ToolWindow来移走程序的任务条图标而避免它再次出现。

Toolwindows永远不会有任务条图标。

调用API

5

函数GetWindowLong和SetWindowLong来使应用程序窗口成为一个ToolWindow。

3)实现界面最小化:

只需在frmform窗体的oncreate事件中使窗体的WindowState属性设为Wsminimized就可以了;

通过上面三步的设置,客户端程序在运行时欢迎界面过后,程序主界面将不会显

示在桌面、任务栏、任务管理器里,只会在后台运行。

3.2.3黑屏界面在客户端在执行响应黑屏事件时,会弹出黑屏界面,在执行解除黑屏时,关闭黑

屏界面,它的功能是在主窗体里调用的。

将其align属性设为alclient,其boderstyle风格设为bsnone,使界面在处于最大化时整个窗体都是黑屏,并且是满屏的。

3.3功能设计

客户端通过调用socket的Receivetext函数将收到的命令数据存放在字符串变量S中,然后根据S中得字符串的不同来响应不同的操作。

Receivetext在Socket连接中读取字符串。

该函数返回连接中已读取的字符串,它只能工作在非阻塞的方式下,要在阻塞方式下读取信息用Receivestream函数。

如S:

=Socket.ReceiveText;

将收到的字符串指令放在变量S中。

3.3.1关机

当客户端(被控端)接收到S中的字符串为‘closewindow’时,则响应关机操作,先提升用户权限,然后通过调用InitiateSystemShutdown()函数来实现操作,再调用showmessage()函数来显示关机的对话框。

要提升用户权限,先调用OpenProcessToken()函数打开一个进程中相关联的访问标志:

OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken);

第一个参数GetCurrentProcess()函数的作用是得到本进程的句柄;

TOKEN_ADJUST_PRIVILEGES对访问令牌改变特权;

再调用LookupPrivilegeValue(nil,

'

SeShutdownPrivilege'

tkp.Privileges[0].Luid)通过第二个参数指定权限名字为关机权限,然后返回一个标识符;

最后调用AdjustTokenPrivileges(hToken,False,tkp,0,nil,rl)函数来修改指定访问标志的权限,设置权限能还是不能;

tkp为新的权限信息。

ExitWindowsEx(EWX_SHUTDOWN,0)函数可以关掉或是重启网络上和本地的任意一台指定的计算机,将第一个参数指定为EWX_SHUTDOWN实现关机功能。

3.3.2重启

当客户端接收到S中的字符串为‘reswindows’时,则响应重启操作,类似于关机

6

操作,先要调用上面三个函数提升权限,然后通过调用ExitWindowsEx(EWX_REBOOT,0)函数来实现操作(和关机参数不同,第一个参数为EWX_REBOOT来实现重启功能)。

3.3.3隐藏任务栏

在Windows中,系统的任务栏本质上也是一个窗口,其窗口类名为“Shell_TrayWnd"

当客户端接收到S中的字符串为‘notaskbar’时,则响应隐藏任务栏的操作,首先调用API函数findwindow(‘shell_traywnd’,nil);

获取了任务栏窗口的句柄,然后调用showwindow(hwnd1,sw_hide)通过第二个参数指定其类型为hide,来实现对窗口的隐藏。

3.3.4显示任务栏

当客户端(被控端)接收到S中的字符串为‘yestaskbar’时,则响应显示任务栏操作,和上面的一样,先调用findwindow('

shell_traywnd'

nil);

来获得任务栏窗口的句柄,然后调用showwindow(hwnd1,sw_show);

指定其类型为show,则任务栏就显示出来了。

3.3.5隐藏开始按钮

当客户端接收到S中的字符串为‘nobutton’时,则响应隐藏开始按钮操作,先调用findwindow('

shell_traywnd'

nil)来获得任务栏窗口的句柄;

然后调用getwindow(hwnd1,gw_child)函数来获得任务栏上最上面的窗口句柄,gw_child为源窗口上最上面的窗口(即开始按钮);

再调用getclassname()为指定的窗口取得类名,最后调用showwindow(hwnd1,sw_hide)指定其类型为hide,开始按钮也就隐藏了。

3.3.6显示开始按钮

当客户端接收到S中的字符串为‘yesbutton’时,则响应显示开始按钮操作,先调用findwindow('

来获得任务栏窗口的句柄,然后调用getwindow(hwnd1,gw_child)函数来获得任务栏上最上面的窗口句柄(即开始按钮),再调用getclassname()为指定的窗口取得类名,最后调用showwindow(hwnd1,sw_show)指定其类型为show,开始按钮也就显示了。

3.3.7隐藏桌面

Windows桌面本身就是一个窗口,其窗口类名为‘Progman'

,当客户端接收到S中的字符串为‘nodesktop’时,则响应隐藏桌面操作,同理:

先调用FindWindow(‘Progman'

nil)来获取桌面窗口的句柄。

然后调用ShowWindow(hDesktop,SW_HIDE)将其类型设为hide,桌面就隐藏了。

3.3.8显示桌面

7

当客户端接收到S中的字符串为‘yesdesktop’时,则响应显示桌面操作,先调用FindWindow(‘Progman’,nil)来获取桌面窗口句柄;

然后调用ShowWindow(hDesktop,SW_show)将其类型设为show,桌面窗口就显示出来了。

3.3.9黑屏

当客户端(被控端)接收到S中的字符串为‘blacksrn’时,则响应黑屏操作。

要实现整个屏幕都是黑屏在响应黑屏的事件中使WindowState的属性设为Wsmaximized就可以了。

并且在处于黑屏状态时要使黑屏窗体是在桌面最前面显示的窗体,调用setforegroundwindow(application.Handle)即可实现。

3.3.10解除黑屏

当客户端(被控端)接收到S中的字符串为‘noblacksrn’时,则响应解除黑屏操作,直接将黑屏窗体关闭,调用其close方法即可。

3.3.11锁定鼠标当客户端(被控端)接收到S中的字符串为‘nomouse’时,则响应锁定鼠标操作,

a:

=rect(0,0,5,5);

rect()函数用来设置移动区域,将范围设置在桌面左上角的正方形框中;

然后用ClipCursor(@a);

将鼠标锁定在上面设置好的区域内。

3.3.12解除锁定当客户端(被控端)接收到S中的字符串为‘yesmouse’时,则响应解除锁定鼠标

操作,直接调用ClipCursor(nil)将鼠标解除锁定。

3.3.13抓取屏幕

当客户端(被控端)接收到S中的字符串为‘getscreen’时,则响应抓取屏幕的操作。

包括抓取整个屏幕,并将图片存在被控端某一指定的位置,将图片转换为JPG格式并将图片传送回控制端。

1)抓取屏幕

要抓取的是被控机的整个桌面,所以将其整个屏幕screen的大小赋值给一个bitmap变量就可以,然后返回其句柄,调用getdc(0)函数,参数0指屏幕。

2)保存图片到文件中,myjep.SaveToFile(‘c:

\you.Jpg’);

将图片保存到c盘下的you文件里。

3)将抓取的图像传回控制端,:

myjep.assign(image1.Picture.Bitmap);

image1抓取的BMP图像转成JPG格式,便于在互联网上传输;

再调用savetostream

()函数,myjep.SaveToStream(MyStream);

将JPG图像写入流中,传回到控制端。

8

4实验结果

4.1发送信息

服务器端(控制端)点击发送信息时,会在客户端(被控端)弹出个文本框来显示发送的内容,如图4-1所示:

服务器端发送的消息客户端接收到的消息图4-1发送与接收消息

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1