国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SOCKET技術(shù)的幾種遠程控制功能的實現(xiàn)

2010-09-19 07:59:54劉玉寶祝海英張良和
長春大學(xué)學(xué)報 2010年8期
關(guān)鍵詞:服務(wù)端鼠標進程

劉玉寶,祝海英,張良和

(1.長春大學(xué) 軟件學(xué)院,吉林 長春 130022;2.長春職業(yè)技術(shù)學(xué)院 信息技術(shù)分院,吉林 長春 130033)

基于SOCKET技術(shù)的幾種遠程控制功能的實現(xiàn)

劉玉寶1,祝海英2,張良和1

(1.長春大學(xué) 軟件學(xué)院,吉林 長春 130022;2.長春職業(yè)技術(shù)學(xué)院 信息技術(shù)分院,吉林 長春 130033)

遠程控制可以作為遠程維護,遠程辦公等應(yīng)用領(lǐng)域的支持工具。本系統(tǒng)采用VC++進行設(shè)計和制作,控制端與服務(wù)端連接后實現(xiàn)被控端的服務(wù)控制功能、進程管理功能、屏幕截取及控制功能,以便進行計算機遠程管理和維護。

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

0 引言

遠程控制的原理很簡單:本地機直接啟動運行的主控端程序,并擁有與被控端主機使用者相同的權(quán)限。因此,如果能夠啟動服務(wù)器端的被控端程序,就可以使用相應(yīng)的客戶端程序直接控制主機。也就是說,客戶端就相當于一個超級用戶,可以直接控制遠程服務(wù)端計算機。

1 遠程控制原理

簡單遠程控制系統(tǒng)由主控端和被控端兩部分組成。主控端用于實施各種對連網(wǎng)計算機的監(jiān)控操作,被控端對于接收到的數(shù)據(jù)進行分析,解釋并執(zhí)行[1],在Windows環(huán)境下即可實現(xiàn)。本系統(tǒng)采用面向連接的服務(wù)實現(xiàn)控制信息的傳輸。面向連接服務(wù)器處理的請求往往比較復(fù)雜,不是一來一去的請求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。使用面向連接的套接字編程,可以通過圖1來表示。其客戶端和服務(wù)端的連接的連接過程如下:

圖1 面向連接的服務(wù)時序圖

首先,應(yīng)該是客戶端的應(yīng)用程序先啟動,并啟動接收數(shù)據(jù)的線程。等待接收一串數(shù)據(jù)。

服務(wù)端將數(shù)據(jù)發(fā)送給指定IP地址的客戶端。客戶端端接收到該數(shù)據(jù)后,保存該申請遠程服務(wù)的客戶端系統(tǒng)的信息。通過接收的SOCKET可以提取出發(fā)送請求的服務(wù)端的IP地址和開放的端口號。用頭插法將數(shù)據(jù)存儲在動態(tài)的鏈表,完成后重新進入數(shù)據(jù)接收狀態(tài),等待其他的需要申請遠程服務(wù)的服務(wù)端主機發(fā)送數(shù)據(jù)消息。

客戶端再向服務(wù)端發(fā)送一串數(shù)據(jù)給服務(wù)端,表示客戶端將和服務(wù)端建立TCP的連接。服務(wù)端收到數(shù)據(jù)后對本機地址端口號的綁定。綁定完成后發(fā)送一串數(shù)據(jù)給客戶端,并進入監(jiān)聽狀態(tài),隨時準備建立TCP連接,并啟動一個線程來接收建立好的TCP連接后的數(shù)據(jù)信息??蛻舳耸盏揭淮當?shù)據(jù)后。便初始化SOCKET的數(shù)據(jù)信息,并通過CONNECT函數(shù)建立TCP連接。系統(tǒng)連接成功,進入遠程控制狀態(tài)。

2 指令數(shù)據(jù)結(jié)構(gòu)的設(shè)計

客戶端發(fā)送的數(shù)據(jù)是指令數(shù)據(jù),指令數(shù)據(jù)只需要一個數(shù)字就行了。服務(wù)端接收到客戶端發(fā)來的指令數(shù)據(jù),只需分析出其中指令數(shù)字就行了,并按指令數(shù)字代表的意義執(zhí)行Windows指令管理本機系統(tǒng)就行了。同時將處理的數(shù)據(jù)結(jié)果發(fā)送給客戶端??蛻舳耸盏降臄?shù)據(jù),執(zhí)行指令后處理得到的數(shù)據(jù),因此建立一個的結(jié)構(gòu)體和宏指令,如圖2所示。來代表發(fā)送的指令和執(zhí)行該指令后得到的數(shù)據(jù)。每次客戶端和服務(wù)端通信時都發(fā)送一個TagCommand結(jié)構(gòu)體大小的數(shù)據(jù)。服務(wù)端通過wCmd來確定執(zhí)行的指令,客戶端通過wCmd來確定收到的數(shù)據(jù)是關(guān)于哪方面的,對接收到的指令數(shù)據(jù)進行解析,執(zhí)行指令,完成遠程控制的任務(wù)。

圖2 指令數(shù)據(jù)結(jié)構(gòu)

3 遠程服務(wù)控制的實現(xiàn)

3.1 注銷服務(wù)端系統(tǒng)的實現(xiàn)

定義一個DWORD類型的變量dwVersion;通過GetVersion()來獲得當前服務(wù)端系統(tǒng)的版本信息。然后執(zhí)行ExitWindowsEx(EWX_LOGOFF,0)函數(shù),實現(xiàn)服務(wù)端主機的注銷。

3.2 關(guān)閉服務(wù)端系統(tǒng)的實現(xiàn)

定義一個DWORD類型的變量dwVersion;通過GetVersion()來獲得當前服務(wù)端系統(tǒng)的版本信息。如果系統(tǒng)版本小于0x80000000,定義一個HANDLE類型的變量hToken,定義一個TOKEN_PRIVILEGES類型的變量tkp。否則執(zhí)行

ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0)函數(shù)。

3.3 重啟服務(wù)端系統(tǒng)的實現(xiàn)

定義一個DWORD類型的變量dwVersion;通過GetVersion()來獲得當前服務(wù)端系統(tǒng)的版本信息。如果系統(tǒng)版本小于0x80000000。否則執(zhí)行ExitWindowsEx(EWX_FORCE|EWX_REBOOT,0)函數(shù)。

3.4 鎖定/解鎖服務(wù)端系統(tǒng)鼠標的實現(xiàn)

定義一個CPoint類型的變量pt,用GetCursorPos(&pt)獲取當前服務(wù)端系統(tǒng)中鼠標的位子[3],用SetCur-sorPos(pt.x,pt.y)來重置鼠標在服務(wù)端桌面上的位置,定義一個CRect類型的r變量。將該矩形的左上角位置設(shè)置為鼠標的X坐標值,右下角位置設(shè)置為鼠標的Y坐標值。其實該矩形框就是一個點的位置值。再通過調(diào)用ClipCursor(&r);函數(shù),限制鼠標只能在該區(qū)域活動。即實現(xiàn)了鼠標的鎖定。通過調(diào)用系統(tǒng)的函數(shù)并將當前鼠標活動區(qū)域限制設(shè)置為NULL,即可實現(xiàn)釋放鼠標的功能。

4 遠程進程管理的實現(xiàn)

4.1 服務(wù)端進程獲取

首先通過循環(huán)結(jié)構(gòu)查找確定在系統(tǒng)中運行的進程的數(shù)量,然后通過調(diào)用自定義函數(shù)來打開訪問服務(wù)端系統(tǒng)進程的訪問權(quán)限,獲得進程訪問令牌句柄,再取得DEBUG權(quán)限的LUID,根據(jù)參數(shù),打開或關(guān)閉相應(yīng)權(quán)限,再調(diào)整權(quán)限,最后關(guān)閉句柄[2]。訪問系統(tǒng)運行進程權(quán)限打開后,便可通過已知的進程數(shù)量,用循環(huán)通過訪問進程的PID來獲取一個進程的信息,在每個for循環(huán)將該進程的數(shù)據(jù)信息發(fā)送給客戶端。

客戶端收到一串指令數(shù)據(jù)后,將其放在全局變量中,通過分析接收到的數(shù)據(jù)。如果是一個進程的數(shù)據(jù)信息,就提取這串數(shù)據(jù)中的進程數(shù)據(jù)信息,將該進程數(shù)據(jù)信息用頭插法將其插入到客戶端中獲取的服務(wù)端的進程鏈表中,同時顯示在客戶端界面上。

服務(wù)端通過獲得的進程的數(shù)量循環(huán)地發(fā)送每個進程的信息,客戶端不斷的接收進程的數(shù)據(jù)信息,并將其動態(tài)保存。便完成了服務(wù)端進程的獲取。

4.2 終止服務(wù)端的進程

服務(wù)端接收到終止進程控制數(shù)據(jù)后,分析出指令如果是KILLPROCESS,便循環(huán)查找出該PID的進程。打開該進程的訪問入口,然后終止該進程,關(guān)閉進程的訪問句柄。

5 屏幕控制的實現(xiàn)

為了保證信息傳輸?shù)姆€(wěn)定,在客戶端和服務(wù)端都重新各自建立一個進程,來監(jiān)聽和處理屏幕控制所需要的數(shù)據(jù)。而新建立的TCP連接,是在原TCP連接的端口號加1,連接雙方的IP地址不變。為此在客戶端和服務(wù)端都新建了兩個socket類型的變量,和SOCKADDR_IN類型的變量。來保證通信的質(zhì)量。通過位圖的數(shù)據(jù)結(jié)構(gòu)如圖3所示對位圖數(shù)據(jù)進行分析和處理。

圖3 位圖數(shù)據(jù)結(jié)構(gòu)圖

先獲取當前桌面的HWND,然后在通過這個HWND獲取當前窗口的HDC,調(diào)用GetWindowRect(hwnd,&rc);函數(shù)獲取當前窗口的大小,最后用HBITMAP類型的變量hbmp賦值::CreateCompatibleBitmap(hsrc,570,428);畫出桌面的圖像,再來設(shè)置圖像數(shù)據(jù)的信息[4]。由此而得到了服務(wù)端系統(tǒng)桌面圖像的位圖。用bitmap.Attach(hbmp);加載位圖的句柄來實現(xiàn)對桌面位圖數(shù)據(jù)的訪問,再將屏幕圖像的發(fā)送給客戶端。通過該位圖的句柄來訪問位圖的屬性,結(jié)構(gòu)大小,像素。完成屏幕圖片頭信息的保存,然后將位圖顏色表的信息拷貝到位圖指針的數(shù)據(jù)區(qū)中,完成位圖顏色信息的保存,最后將每個像素值的數(shù)據(jù)保存[5]。完成上述數(shù)據(jù)的保存后,便將三個位圖信息依次發(fā)送給客戶端,每發(fā)送一次延時0.1秒,這是為了防止客戶端接收到數(shù)據(jù)發(fā)生阻塞而不能完整的接收一個圖片的信息。

客戶端接收到服務(wù)端發(fā)來的數(shù)據(jù)后依次存放。其中需要根據(jù)圖像的信息來計算圖像的像素數(shù)據(jù)所需要的空間,然后動態(tài)的開辟所需大小的空間。將位圖的像素信息保存在該區(qū)域內(nèi)。再分析接收到的位圖的數(shù)據(jù)信息,并將其顯示在客戶端顯示區(qū)域里。

6 結(jié)論

系統(tǒng)實現(xiàn)了網(wǎng)絡(luò)中數(shù)據(jù)信息的傳輸和對系統(tǒng)的基本的遠程控制。通過調(diào)用Windows API編程、利用TCP/IP協(xié)議、采用C/S模型實現(xiàn)了幾種遠程控制功能。系統(tǒng)的架構(gòu)和設(shè)計到最后實現(xiàn),采用宏定義作為指令信息進行傳輸和控制,系統(tǒng)實現(xiàn)中涉及到,動態(tài)鏈表,多級指針,遞歸查找的算法……以及整個遠程控制系統(tǒng)的架構(gòu)都為以后進一步的研究遠程控制提供了一定的思路和借鑒意義。但是仍然存在許多需要改進的地方,入系統(tǒng)運行效率不高;只能實現(xiàn)局域網(wǎng)內(nèi)的遠程控制,還不能實現(xiàn)跨網(wǎng)的遠程控制,需要更進一步改進和完善。

[1] 梁洋洋.Visual C++黑客編程揭秘與防范[M].北京:人民郵電出版社,2009.

[2] 張友生.遠程控制編程技術(shù)[M].北京:電子工業(yè)出版社,2002.

[3] 求是科技.Visual C++程序設(shè)計與開發(fā)技術(shù)大全[M].北京:人民郵電出版社,2005.

[4] 謝鳳英,趙丹培,姜志國.Visual C++數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2008.

[5] Stanley B.Lippman,Josee Lajoie著,潘愛民,張麗譯.C++Primer[M].北京:中國電力出版社,2006.

責(zé)任編輯:吳旭云

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-),男,吉林榆樹人,講師,博士研究生,主要從事嵌入式系統(tǒng),智能控制,軟件工程等方面的研究。

猜你喜歡
服務(wù)端鼠標進程
Progress in Neural NLP: Modeling, Learning, and Reasoning
Engineering(2020年3期)2020-09-14 03:42:00
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
新時期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
在Windows Server 2008上創(chuàng)建應(yīng)用
社會進程中的新聞學(xué)探尋
我國高等教育改革進程與反思
Linux僵死進程的產(chǎn)生與避免
“鴿子”玩升級 黑你沒商量
45歲的鼠標
永胜县| 乡城县| 宁晋县| 巍山| 大英县| 赣州市| 青铜峡市| 旺苍县| 榆社县| 莲花县| 玛多县| 肥城市| 禹城市| 凭祥市| 贵德县| 德安县| 朝阳县| 武强县| 读书| 迭部县| 灵山县| 青浦区| 肃宁县| 和平区| 洪雅县| 吉林市| 武定县| 嘉兴市| 太谷县| 红安县| 米林县| 海林市| 扎囊县| 五河县| 兴仁县| 沙河市| 陈巴尔虎旗| 焦作市| 延津县| 江西省| 获嘉县|