摘要:3.2控制端實現(xiàn)控制端包括5個大的模塊:操作界面、自動注冊、發(fā)送消息、發(fā)送文件、應(yīng)用管理。操作界面:操作界面是基于應(yīng)用層和應(yīng)用框架層實現(xiàn)的。調(diào)用Android組件庫中的Activity組件和ListActivity組件顯示操作列表;點擊列表按鈕等組件用來調(diào)用操作命令;通過界面操作生成對應(yīng)的命令發(fā)送到被控終端,并顯示反饋結(jié)果。自動注
3.2 控制端實現(xiàn)
控制端包括5個大的模塊:操作界面、自動注冊、發(fā)送消息、發(fā)送文件、應(yīng)用管理。
操作界面:操作界面是基于應(yīng)用層和應(yīng)用框架層實現(xiàn)的。調(diào)用Android組件庫中的Activity組件和ListActivity組件顯示操作列表;點擊列表按鈕等組件用來調(diào)用操作命令;通過界面操作生成對應(yīng)的命令發(fā)送到被控終端,并顯示反饋結(jié)果。
自動注冊:啟動后,通過組播地址,每隔30 s向網(wǎng)絡(luò)中發(fā)送一次心跳包,報文為“regist‖ask”,通知網(wǎng)絡(luò)中的被控終端進行注冊。監(jiān)聽UDP端口和TCP端口,當(dāng)接收到被控終端發(fā)送的注冊信息后,取出源IP地址和ID,保存到數(shù)據(jù)庫中,完成注冊。
發(fā)送消息:通過界面操作輸入文本內(nèi)容,向被控終端IP發(fā)送消息。報文為“sendMassage‖content”,第一部分是命令,第二部分是消息內(nèi)容。
發(fā)送文件:選擇本地文件向被控終端IP發(fā)送。采用Socket發(fā)送報文“sendfile‖filename//filePath”.該報文第1部分是命令,表示發(fā)送文件,第2部分是文件名,第3部分是文件保存路徑。通過發(fā)送路徑,可以替換被控終端上的文件,實現(xiàn)數(shù)據(jù)更新等功能。文件內(nèi)容在Socket連接的輸入/輸出流中,保存的文件名和路徑從報頭中獲取。
應(yīng)用管理:首先,向被控終端IP發(fā)送命令,獲取被控終端應(yīng)用列表;然后,選擇對應(yīng)操作發(fā)送命令,在被控終端接收到命令后,調(diào)用Android接口和Agent代理執(zhí)行命令。該命令包括4個:install、start、stop、uninstall.例如:報文“install ‖file.apk”,通過Socket發(fā)送file.apk應(yīng)用到被控端的sdcard/apk目錄下,然后,通過agent代理執(zhí)行install安裝命令安裝該應(yīng)用。此外,start、stop和uninstall三個命令中,只是調(diào)用接口執(zhí)行,不傳送文件。
3.3 被控終端實現(xiàn)
自動登錄:被控終端啟動的時候,也會建立兩個線程和一個BroadCastReceiver.一個線程監(jiān)聽組播連接請求的消息,另一個線程監(jiān)聽TCP端口的命令;廣播接收器接收GSM網(wǎng)絡(luò)發(fā)送的短信命令。第一個線程中,組播端口監(jiān)聽到控制端發(fā)送的請求后,取得IP地址,然后,發(fā)送帶有自己ID的Socket包,報文內(nèi)容為“regist ‖IMEI號”,包括注冊命令regist和IMEI號(Android終端標(biāo)識)。第二個線程中,創(chuàng)建一個ServerSocket,監(jiān)聽控制端發(fā)送的TCP消息。BroadCastReeeiver接收到短消息廣播后,傳遞給服務(wù)進行判斷,看其接收到的是否是命令,如果是命令則執(zhí)行對應(yīng)操作。
接收消息:在被控終端,Socket接收到控制端的消息后,會調(diào)用NotificationManager,在Android終端通知欄顯示消息,點擊通知會顯示詳細信息。
接收文件:Socket后臺接收文件,保存在/sdcard/download文件夾下,然后通過Agent命令執(zhí)行copy命令,將文件復(fù)制到命令里面指定的路徑下。文件名和保存路徑通過報頭獲取。
管理應(yīng)用:安裝應(yīng)用分兩步實現(xiàn),第一步接收文件,第二步執(zhí)行安裝。第一步實現(xiàn)與上面所講的接收文件相同,只是報文為“install‖n ame.apk”.默認保存到SD卡上的mnt/sdcard/apk路徑下,然后,調(diào)用agent執(zhí)行shell安裝命令install mnt/sdeard/apk/name.apk.卸載應(yīng)用時,直接執(zhí)行接收到的命令uninstall packagename.啟動應(yīng)用時,通過Android系統(tǒng)接口Intent實現(xiàn),停止和卸載都是通過被控終端上的Agent代理實現(xiàn)?!皊tart‖appName”啟動應(yīng)用的時候,通過本地包管理獲取到appName對應(yīng)的包名packageName,新建一個Intent,啟動包含該包的應(yīng)用。代碼如下:
通過shell命令執(zhí)行kill PID.PID是應(yīng)用進程號,通過ActivityManager可以獲取到。
設(shè)備控制:可以通過命令例如“shell‖reboot”直接控制重啟。
3.4 Agent代理實現(xiàn)
在編譯系統(tǒng)內(nèi)核的時候,將agent_server編入到路徑/data/agentserver/agent_server下,用以接收命令。調(diào)用的時候,通過建立一個本地Socket,通過數(shù)據(jù)流發(fā)送shell命令到agent_setwer所在路徑,實現(xiàn)通信。當(dāng)agent_server接收到命令后,執(zhí)行shell命令。
4 測試結(jié)果
設(shè)計的系統(tǒng)在ZTE U880手機上連接WiFi進行測試。圖3為控制端界面,圖4為控制端發(fā)送消息,圖5為被控終端接收消息,圖6為發(fā)送文件,圖7為遠程安裝應(yīng)用軟件,圖8為遠程卸載應(yīng)用軟件,圖9為shell命令界面。測試結(jié)果表明,系統(tǒng)能夠?qū)崿F(xiàn)發(fā)送消息、發(fā)送文件、安裝和卸載應(yīng)用,以及執(zhí)行shell命令實現(xiàn)系統(tǒng)重啟功能。
結(jié)語
本文設(shè)計了一個采用C/S模式實現(xiàn)的Android遠程控制系統(tǒng)??刂贫伺c被控終端之間采用Socket進行網(wǎng)絡(luò)通信,在知道對方SIM卡號的情況下,也能通過GSM發(fā)送短信通信,能夠?qū)崿F(xiàn)多種網(wǎng)絡(luò)的穩(wěn)定通信。通過Linux代理能夠?qū)崿F(xiàn)root權(quán)限的操作,理論上可以實現(xiàn)對Android系統(tǒng)的完全遠程控制。
[1] [2]
通信工程師備考資料免費領(lǐng)取
去領(lǐng)取