馬蓉暉,馮素琴
(忻州師范學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系,山西忻州034000)
大多數(shù)的監(jiān)控管理軟件缺乏實(shí)時(shí)性和直觀性,監(jiān)控管理力度有限。為解決這些問題,引入遠(yuǎn)程屏幕截取技術(shù)。該技術(shù)截取客戶機(jī)的屏幕圖像到服務(wù)器端[1]。主要包括連接模塊、截取模塊、傳送模塊和控制模塊。其中連接模塊、截取模塊和傳送模塊實(shí)現(xiàn)了遠(yuǎn)程屏幕截取功能;控制模塊實(shí)現(xiàn)了遠(yuǎn)程關(guān)機(jī)、遠(yuǎn)程重啟、光驅(qū)控制和鼠標(biāo)控制等功能。
遠(yuǎn)程屏幕功能分為:監(jiān)控端和被監(jiān)控端。對于局域網(wǎng)而言,每個(gè)客戶機(jī)的IP地址可以是靜態(tài)的,也可以是動態(tài)分配的。通過計(jì)算機(jī)名稱進(jìn)行連接,即可解決問題[2]。為保證圖像信息的準(zhǔn)確性,采用TCP協(xié)議。為了避免造成網(wǎng)絡(luò)擁塞,采用一對一連接。兩端各有一個(gè)Winsock控件。其中被監(jiān)控端的Winsock控件應(yīng)處于listen狀態(tài);監(jiān)控端等待輸入對方IP地址或計(jì)算機(jī)名稱后,用connect方法與被監(jiān)控端建立連接[3]。注意:兩端的端口號應(yīng)一致,否則不能建立連接。
被監(jiān)控端:文本框控件用于顯示本地IP地址和計(jì)算機(jī)名稱。標(biāo)簽控件的標(biāo)題分別為本地機(jī)器地址和本地機(jī)器名稱。被監(jiān)控端的主要代碼如下。
Me.tcpclient.LocalPort=2000 ‘設(shè)置監(jiān)聽端口號Me.tcpclient.Listen‘開始監(jiān)聽
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
監(jiān)控端的主要代碼如下。
Me.Text3.Text=""‘獲取相關(guān)文本框的值
Me.Text1.Text=Me.Winsock1.LocalHostName
Me.Text2.Text=Me.Winsock1.LocalIP
Me.StatusBar1.Style = sbrSimple‘設(shè)置狀態(tài)欄
Me.StatusBar1.SimpleText= "準(zhǔn)備建立連接"
If Me.Text3.Text= ""Then
MsgBox"請輸入對方ip或計(jì)算機(jī)名稱!",vbOKOnly,"提示信息"
Exit Sub
End If
Me.Winsock1.RemoteHost=Me.Text1.Text‘設(shè)置IP地址或計(jì)算機(jī)名稱
Me.Winsock1.RemotePort=2000 ‘遠(yuǎn)程端口號
Me.Winsock1.Connect‘進(jìn)行連接
Me.StatusBar1.SimpleText="建立連接中……"
被監(jiān)控端通過調(diào)用API函數(shù)來實(shí)現(xiàn)屏幕圖像的截取,并保存到硬盤上便于傳送時(shí)讀取該文件[4]。接收到監(jiān)控端的截取命令后,調(diào)用API函數(shù)截取并保存即可。
被監(jiān)控端:在連接模塊的工程內(nèi),添加一個(gè)標(biāo)準(zhǔn)模塊,用于聲明相關(guān)的API函數(shù)和定義相關(guān)的函數(shù)。被監(jiān)控端的主要代碼如下。
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
監(jiān)控端的主要代碼如下。
Me.Winsock1.SendData"entire"‘發(fā)送指令以截圖
Me.Winsock1.SendData"active"
傳送模塊只要在前兩個(gè)模塊的基礎(chǔ)上,將被監(jiān)控機(jī)的圖像傳送到監(jiān)控機(jī)即可。圖像文件讀取使用Visual Basic中的文件讀取命令;傳送調(diào)用Winsock的senddata方法,接收調(diào)用getdata方法[6]。當(dāng)傳送完畢,即可加載圖像。為防止接收圖像占用大量硬盤空間,加載后需要?jiǎng)h除該圖像。代碼略。
控制模塊主要包括:光驅(qū)控制、鼠標(biāo)控制、計(jì)算機(jī)控制。光驅(qū)控制包括:彈出光驅(qū)、彈入光驅(qū)[5]。鼠標(biāo)控制包括:交換鼠標(biāo)左右鍵、隱藏鼠標(biāo)。計(jì)算機(jī)控制包括:注銷計(jì)算機(jī)、重啟計(jì)算機(jī)、關(guān)閉計(jì)算機(jī)。一般來說隱藏鼠標(biāo)指針有兩種方法。一種是用一個(gè)透明圖標(biāo)代替鼠標(biāo)指針,并將MousePointer屬性設(shè)為99。另一種是用API函數(shù)來隱藏指針。其余工作通過調(diào)用相關(guān)的API函數(shù)實(shí)現(xiàn)。這里僅介紹光驅(qū)控制。
被監(jiān)控端:連接模塊的工程中,添加一個(gè)標(biāo)準(zhǔn)模塊。被監(jiān)控端主要代碼如下。
標(biāo)準(zhǔn)模塊內(nèi)的主要代碼如下:
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‘打開光驅(qū)
SendMCIString"set cd door open"
Else ‘關(guān)閉光驅(qū)
SendMCIString"set cd door closed"
End If
End Sub
監(jiān)控端:在窗體內(nèi)添加兩個(gè)按鈕,分別用于控制彈出、彈入光驅(qū)。
兩個(gè)命令按鈕的代碼分別如下:
Me.Winsock1.SendData"opencd"
Me.Winsock1.SendData"closecd"
雖然完成了服務(wù)器對客戶機(jī)的屏幕截取功能,但是還有一些問題尚待解決。比如:屏幕圖像的壓縮和解壓縮問題,網(wǎng)絡(luò)擁塞問題以及判斷光驅(qū)狀態(tài)問題等等。屏幕圖像壓縮后,便于快速的傳送。解決了網(wǎng)絡(luò)擁塞,便于建立一對多連接。一對多的TCP連接可以通過動態(tài)加載Winsock控件數(shù)組實(shí)現(xiàn)。這些問題有待以后進(jìn)一步完善。
[1]王銳等.網(wǎng)絡(luò)最高安全技術(shù)指南[M].北京:機(jī)械工業(yè)出版社,1998.
[2]張光勇.校園網(wǎng)IP地址管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科技創(chuàng)新導(dǎo)報(bào),2007(32):1-2.
[3]王達(dá).網(wǎng)管員必讀——網(wǎng)絡(luò)安全[M].北京:電子工業(yè)出版社,2007.
[4]陳文云,鞏丹宏.網(wǎng)絡(luò)通信軟件設(shè)計(jì)原理及應(yīng)用[M].西安:西安交通大學(xué)出版社,2000.
[5]王宇,張寧.網(wǎng)絡(luò)監(jiān)聽原理分析與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,38(7):142-145.
[6]龔沛曾,陸尉民,楊志強(qiáng).Visual Basic程序設(shè)計(jì)教程(6.0)[M].北京:高等教育出版社,2000.