多網(wǎng)絡(luò)和Linux代理的Android無線遠(yuǎn)程控制系統(tǒng)
2. 2 控制端設(shè)計
Android控制端在使用WiFi和GPRS網(wǎng)絡(luò)時,通過Socket進(jìn)行通信,可以實現(xiàn)全部的命令;在使用GSM網(wǎng)絡(luò)時,通過短消息發(fā)送命令進(jìn)行控制,只能發(fā)送部分操作指令,不能進(jìn)行的操作包括發(fā)送文件、應(yīng)用程序等需要通過IP地址進(jìn)行通信的操作。
Sqlite數(shù)據(jù)庫保存被控終端的信息數(shù)據(jù)和操作日志。Linux文件系統(tǒng)保存需要發(fā)送的文件和應(yīng)用程序等。Android控制端具體功能設(shè)計如下:
①自動注冊:編寫Java程序通過接口調(diào)用MulticastSocket發(fā)送請求注冊廣播,并監(jiān)控端口,接收被控終端的注冊廣播。
②發(fā)送消息:通過已注冊的被控終端IP地址,編程調(diào)用Socket接口發(fā)送消息到被控終端,并監(jiān)聽端口,接收反饋消息。
③發(fā)送文件:編寫監(jiān)控程序調(diào)用Socket端口進(jìn)行通信,調(diào)用Android文件系統(tǒng),讀取存儲在SD卡上的文件進(jìn)行發(fā)送。
④發(fā)送控制命令:有兩種方式,一種通過Socket發(fā)送控制命令到被控終端IP;另一種通過GSM網(wǎng)絡(luò)發(fā)送特定格式的短消息到被控終端手機(jī),實現(xiàn)命令控制設(shè)備。
2.3 被控終端設(shè)計
Android被控終端沒有監(jiān)控界面,只有一個后臺服務(wù)和一個Agent代理,該代理也是一個后臺服務(wù),不過這個服務(wù)是集成在Android系統(tǒng)版本中的。
本地后臺服務(wù)會隨系統(tǒng)啟動而啟動,啟動后會建立一個線程(Thread),線程通過Socket監(jiān)聽本機(jī)的通信端口;同時,還會建立一個廣播接收器(BroadcastReceiver),用于接收通過GSM網(wǎng)絡(luò)發(fā)來的短消息廣播。當(dāng)Socket端口監(jiān)聽線程監(jiān)聽到數(shù)據(jù)時,先判斷其是否為控制端的注冊請求。如果是,則反饋信息到控制端注冊;如果不是,則判斷是否為命令。如果是命令,則交給Agent代理執(zhí)行;如果不是,再判斷其是否為消息。如果是消息,則調(diào)用Android的Activity顯示消息;如果不是,則繼續(xù)判斷其是否為文件。如果是文件,則保存文件到文件系統(tǒng)中;如果不是,則退出,丟棄該消息。當(dāng)廣播接收器接收到GSM短信時,后臺服務(wù)對消息進(jìn)行判斷,看其是否為控制命令。如果是命令,則GSM短信會被截斷,被控終端用戶不會提示收到短消息,然后,將命令傳遞給Agent代理進(jìn)行執(zhí)行,調(diào)用Android系統(tǒng)接口對應(yīng)的功能模塊執(zhí)行。最后,將執(zhí)行結(jié)果通過Socket反饋給控制端。其對應(yīng)的功能模塊設(shè)計流程圖如圖2所示。本文引用地址:http://cafeforensic.com/article/159562.htm
3 具體實現(xiàn)
3.1 多網(wǎng)絡(luò)通信實現(xiàn)
該系統(tǒng)的總體設(shè)計思路是;一定數(shù)量的Android終端用戶群之間,有一個作為控制端,其余的是被控終端,通過WiFi無線網(wǎng)、GPRS網(wǎng)絡(luò)進(jìn)行通信,控制端發(fā)送命令到被控終端執(zhí)行,采用C/S結(jié)構(gòu)。
(1) GPRS網(wǎng)絡(luò)和WiFi網(wǎng)絡(luò)通信實現(xiàn)
首先,在控制終端和被控端都建立一個TCP端口監(jiān)聽線程。分別建立一個ServerSocket,能各自監(jiān)聽自己的TCP端口,端口地址分別為:控制端為10000,被控終端10001。被控終端監(jiān)聽控制端發(fā)送命令信息,命令放在報頭中,而文件等內(nèi)容放在數(shù)據(jù)流中;命令會被執(zhí)行并保存到數(shù)據(jù)中,文件會保存到SD卡上,等待被命令調(diào)用執(zhí)行,在此,完成TCP通信。另外,控制端和被控端各自創(chuàng)建一個MulticastSocket對象,并加入一個組播地址,地址為234.0.0.1,控制端的端口為10002,被控終端端口為10003??刂贫擞靡员O(jiān)聽被控終端發(fā)送的登錄廣播信息;被控終端監(jiān)聽控制端發(fā)送的連接請求;當(dāng)接收到組播UDP包后,取得源IP地址和源ID,將信息保存到本地數(shù)據(jù)庫中,完成通信。
(2) GSM網(wǎng)絡(luò)通信實現(xiàn)
如果在GPRS和WiFi都不通的情況下,使用GSM短信發(fā)送命令。具體如下:在被控制端建立一個Broadcast Receiver,接收系統(tǒng)短信廣播,并將優(yōu)先級設(shè)置為2147483674最高級別,這樣會優(yōu)先于其他方式先對短信內(nèi)容進(jìn)行處理。當(dāng)有短信進(jìn)入被控終端時,Broadcast Receiver會優(yōu)先截取到短信內(nèi)容,首先判斷該短信是否為控制命令。如果是,則將命令發(fā)送到Service執(zhí)行,同時截斷廣播,這樣手機(jī)收件箱就不會收到該條短信。
3.2 控制端實現(xiàn)
控制端包括5個大的模塊:操作界面、自動注冊、發(fā)送消息、發(fā)送文件、應(yīng)用管理。
操作界面:操作界面是基于應(yīng)用層和應(yīng)用框架層實現(xiàn)的。調(diào)用Android組件庫中的Activity組件和ListActivity組件顯示操作列表;點(diǎn)擊列表按鈕等組件用來調(diào)用操作命令;通過界面操作生成對應(yīng)的命令發(fā)送到被控終端,并顯示反饋結(jié)果。
linux相關(guān)文章:linux教程
評論