windows系統下 遠端控制
基於工作需要,最近開發一個遠端控制桌面專案。
基本物件:被控制端,控制端,中轉伺服器結構。
被控制端稱為Server提供桌面影象,接受他人遠端輸入控制。
控制端主要根據被控制端ID發起控制,可遠端控制桌面進行常規操作(滑鼠,鍵盤,檔案等)。
中轉報務器 主要提供每臺被控制端的唯一ID(可根據被控制端的硬體標識給出ID),為被控制端和控制端之間通訊建立橋樑,根據ID提供給控制端相應的IP和埠,以及登入驗證服務。
由於目前大多數的被控制桌面處於路由器之下,沒有公網IP,對外只有路由器公網IP。通訊準備採用TCP/IP協議。
在通訊協議上,可以讓被控制端作為SERVER端,也可以作為Clent端。作為Server端需要對外公開IP和埠,主動監聽,利用NAT穿透技術,讓其可以被其它計算機訪問。作為Client端,可以直接訪問控制端的IP,要求控制端有公網IP和埠可以使用。
二者各有優點,作為Client端處於路由器之下,不用處理NAT穿透問題,只要能連網就可以被訪問,缺點是需要一直主動嘗試去連線伺服器,不能按需傳送聯接,有點肉機的感覺。作為SERVER開放埠,需要處理NAT穿透。但是可以按需要被連線,缺點就是需要公開埠,容易被攻擊的可能性。
程式設計上,採用C#語言開發,部分呼叫native api 實現功能,結構上儘量作到資料和介面分隔,事件驅動的模式。
遠端控制實現方式,從遠端桌面截圖,並壓縮後發往控制端,序列化之後,以位元組流方式實現畫面傳輸。鍵盤,滑鼠控制,採用windows api 模擬實現。檔案傳輸,以剪貼簿複製\貼上實現(如果技術上問題,就直接採用開發上傳下載功能)。
可能遇到難點:
1、NAT穿透的具體實現方式
2、在鎖定情況下,螢幕的控制
3、利用Windows 服務達到程式自動啟動,相關開發沒有經驗
4、剪貼簿實現檔案傳輸,達到剪貼簿共享的實現方式
5、影象傳輸的效率問題