APP下载

网络监控系统的研究与设计

2011-04-12马蓉晖冯素琴

关键词:光驱控件IP地址

马蓉晖,冯素琴

(忻州师范学院计算机科学与技术系,山西忻州034000)

大多数的监控管理软件缺乏实时性和直观性,监控管理力度有限。为解决这些问题,引入远程屏幕截取技术。该技术截取客户机的屏幕图像到服务器端[1]。主要包括连接模块、截取模块、传送模块和控制模块。其中连接模块、截取模块和传送模块实现了远程屏幕截取功能;控制模块实现了远程关机、远程重启、光驱控制和鼠标控制等功能。

1 连接模块设计

远程屏幕功能分为:监控端和被监控端。对于局域网而言,每个客户机的IP地址可以是静态的,也可以是动态分配的。通过计算机名称进行连接,即可解决问题[2]。为保证图像信息的准确性,采用TCP协议。为了避免造成网络拥塞,采用一对一连接。两端各有一个Winsock控件。其中被监控端的Winsock控件应处于listen状态;监控端等待输入对方IP地址或计算机名称后,用connect方法与被监控端建立连接[3]。注意:两端的端口号应一致,否则不能建立连接。

被监控端:文本框控件用于显示本地IP地址和计算机名称。标签控件的标题分别为本地机器地址和本地机器名称。被监控端的主要代码如下。

Me.tcpclient.LocalPort=2000 ‘设置监听端口号Me.tcpclient.Listen‘开始监听

Me.Text2.Text=Me.tcpclient.LocalIP ‘获取 IP Me.Text3.Text=Me.tcpclient.LocalHostName Winsock 控 件 的 tcpclient_ConnectionRequest代码:

Private Sub tcpclient_ConnectionRequest(ByVal requestID As Long)

If Me.tcpclient.State <> sckClosed‘接受新连接

Then tcpclient.Close

tcpclient.Accept requestID

监控端的主要代码如下。

Me.Text3.Text=""‘获取相关文本框的值

Me.Text1.Text=Me.Winsock1.LocalHostName

Me.Text2.Text=Me.Winsock1.LocalIP

Me.StatusBar1.Style = sbrSimple‘设置状态栏

Me.StatusBar1.SimpleText= "准备建立连接"

If Me.Text3.Text= ""Then

MsgBox"请输入对方ip或计算机名称!",vbOKOnly,"提示信息"

Exit Sub

End If

Me.Winsock1.RemoteHost=Me.Text1.Text‘设置IP地址或计算机名称

Me.Winsock1.RemotePort=2000 ‘远程端口号

Me.Winsock1.Connect‘进行连接

Me.StatusBar1.SimpleText="建立连接中……"

2 截取模块设计

被监控端通过调用API函数来实现屏幕图像的截取,并保存到硬盘上便于传送时读取该文件[4]。接收到监控端的截取命令后,调用API函数截取并保存即可。

被监控端:在连接模块的工程内,添加一个标准模块,用于声明相关的API函数和定义相关的函数。被监控端的主要代码如下。

If Client Then

hDCSrc=GetDC(hWndSrc)Else

hDCSrc=GetWindowDC(hWndSrc)

End If

hDCMemory=CreateCompatibleDC(hDCSrc)

hBmp=CreateCompatibleBitmap(hDCSrc,Width-Src,HeightSrc)

hBmpPrev=SelectObject(hDCMemory,hBmp)‘获得屏幕属性

……

r=DeleteDC(hDCMemory)

r=ReleaseDC(hWndSrc,hDCSrc)'释放资源

Set CaptureWindow=CreateBitmapPicture(hBmp,hPal)

Winsock控件的tcpclient_DataArrival事件代码如下:

Private Sub tcpclient_DataArrival(ByVal bytesTotal As Long)

tcpclient.GetData a

Select Case a

Case"entire"

Set Picture1.Picture=CaptureScreen()

SavePicture Picture1.Picture,"d:ww.bmp"

Case"active"

Set Picture1.Picture=CaptureActiveWindow()

SavePicture Picture1.Picture,"d:ww.bmp"

End Select

End Sub

监控端的主要代码如下。

Me.Winsock1.SendData"entire"‘发送指令以截图

Me.Winsock1.SendData"active"

3 传送模块

传送模块只要在前两个模块的基础上,将被监控机的图像传送到监控机即可。图像文件读取使用Visual Basic中的文件读取命令;传送调用Winsock的senddata方法,接收调用getdata方法[6]。当传送完毕,即可加载图像。为防止接收图像占用大量硬盘空间,加载后需要删除该图像。代码略。

4 控制模块

控制模块主要包括:光驱控制、鼠标控制、计算机控制。光驱控制包括:弹出光驱、弹入光驱[5]。鼠标控制包括:交换鼠标左右键、隐藏鼠标。计算机控制包括:注销计算机、重启计算机、关闭计算机。一般来说隐藏鼠标指针有两种方法。一种是用一个透明图标代替鼠标指针,并将MousePointer属性设为99。另一种是用API函数来隐藏指针。其余工作通过调用相关的API函数实现。这里仅介绍光驱控制。

被监控端:连接模块的工程中,添加一个标准模块。被监控端主要代码如下。

标准模块内的主要代码如下:

Public Sub CDDoor(bOpen As Boolean)

Dim dump

Dim returnstring As String

If(SendMCIString("open cdaudio alias cd wait shareable")=False)Then

Exit Sub

End If

SendMCIString"set cd time format tmsf wait"

If bOpen Then‘打开光驱

SendMCIString"set cd door open"

Else ‘关闭光驱

SendMCIString"set cd door closed"

End If

End Sub

监控端:在窗体内添加两个按钮,分别用于控制弹出、弹入光驱。

两个命令按钮的代码分别如下:

Me.Winsock1.SendData"opencd"

Me.Winsock1.SendData"closecd"

5 结语

虽然完成了服务器对客户机的屏幕截取功能,但是还有一些问题尚待解决。比如:屏幕图像的压缩和解压缩问题,网络拥塞问题以及判断光驱状态问题等等。屏幕图像压缩后,便于快速的传送。解决了网络拥塞,便于建立一对多连接。一对多的TCP连接可以通过动态加载Winsock控件数组实现。这些问题有待以后进一步完善。

[1]王锐等.网络最高安全技术指南[M].北京:机械工业出版社,1998.

[2]张光勇.校园网IP地址管理系统的设计与实现[J].科技创新导报,2007(32):1-2.

[3]王达.网管员必读——网络安全[M].北京:电子工业出版社,2007.

[4]陈文云,巩丹宏.网络通信软件设计原理及应用[M].西安:西安交通大学出版社,2000.

[5]王宇,张宁.网络监听原理分析与实现[J].计算机应用研究,2003,38(7):142-145.

[6]龚沛曾,陆尉民,杨志强.Visual Basic程序设计教程(6.0)[M].北京:高等教育出版社,2000.

猜你喜欢

光驱控件IP地址
铁路远动系统几种组网方式IP地址的申请和设置
关于.net控件数组的探讨
IP地址切换器(IPCFG)
基于SNMP的IP地址管理系统开发与应用
简单技巧管好本本光驱
公安网络中IP地址智能管理的研究与思考
ASP.NET服务器端验证控件的使用
光驱盒 让光驱重新“上岗”
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
让局域网网络设备远离非法共享