|
原本是一個獨立的程序,只是因為功能很少就整合在【短信遠控電腦 V2.0 Bate】里面。并更名為【手機遠控電腦 V3.0 Bate】(總覺得這個名字有點拗口..)。
設計這個程序初是因為我的一個朋友覺得【短信遠控電腦 V2.0 Bate】這個程序要花錢。因為是用短信來控制的。(我覺得很郁悶...)
建議我設計一個可以用手機瀏覽器來控制電腦的程序(現在設計完了,我的朋友又覺得沒多大用處。我表示很糾結...)
這個程序實現原理還得謝謝小凡,不然我肯定是沒法完成的。感激吖~~~ 每次遇到問題,他都很有耐心解答。太TMD感動了...
實現原理:
在設計前,需要了解一下HTTP協議。
================================================================================================
協議頭:
GET / HTTP/1.1 //第一個GET代表方法 這兩種都是合法的
GET /index.html HTTP/1.1;
GET http://www.hao123.com/index.html HTTP/1.1
一般第二種形式很少 在代理訪問時才會是這種形式
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/rar */*
接受文件的類型 上面那些是文件描述 固定的
Accept-Language: zh-cn
標識 自然語言
Accept-Encoding: gzip, deflate
支持的壓縮方式
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
瀏覽器標識
當年騰訊網頁全面拒絕360瀏覽器,就是通過這個實現的
Host: 192.168.1.5
Connection: Keep-Alive
這句話 我的理解是 客戶端允許不斷開TCP連接
具體應用,百度搜索引擎里,聯想搜索,肯定沒有斷開
==================================================================================================
先用 recv 阻塞函數 等待瀏覽器的訪問,如果有用戶使用瀏覽器訪問的話
那么 recv 會接受到 瀏覽器的請求數據包:
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; 360SE)
Host: 192.168.1.5
Connection: Keep-Alive
注意第一個: GET / HTTP/1.1 ,我們可以分析得到的數據,看看 如果發現有GET / HTTP/1.1 說明是瀏覽器訪問的,那么我們就可以將預先設計好的HTML文件 用 send 發送給對方。在發送前需要先發送一個協議頭。
HTTP/1.1 200 OK // 標識成功
Server: L、 // 服務器的名字
Content-Length: 1514 // html文件的大小 很重要滴
Content-Type: text/html;charset=GB2312 // 編碼方式
Expires: Sat, 28 Jan 2012 02:58:38 GMT
Connection: close // 我的理解是可以斷開的TCP連接
再緊接著發送預先設計的HTML文件。這樣對方的瀏覽器就能完整的顯示出你發送過去的網頁。
當對方點擊你發送的HTML文件中的某一個超鏈接,例如 超鏈接指向的是 l.html 頁面。那么我們得到的數據包就是:
GET /l.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://192.168.1.5/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; 360SE)
Host: 192.168.1.5
Connection: Keep-Alive
注意第一行:GET /l.html HTTP/1.1
我們就可以根據這個信息得到對方點擊的是哪個超鏈接,那么我們就反饋相應的HTML網頁。
你可以通過抓包工具得到我的程序發送、接受的數據包。在我的程序中,操作電腦的超鏈接所指向的頁面,實際上是不存在的。
例如,在【進程管理】的頁面中,【結束 PID】 的超鏈接所指向的頁面假如是:KILLPID2003.html。(2003 是進程的PID)這個頁面實質上不存在的。目的只是想通過超連接得到用戶所要結束的 PID。假設用戶點擊了這個超鏈接,那么得到的數據包就是:
GET /KILLPID2003.html HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://192.168.1.5/GetWindow.html
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; 360SE)
Host: 192.168.1.5
Connection: Keep-Alive
注意第一行:GET /KILLPID2003.html HTTP/1.1 ,我們可以分析這一句。得到的PID是2003,那么就可以遍歷進程,對比PID,結束相對應的PID進程就行了,然后重新遍歷進程列表,生成HTML文件發送給對方。
整個程序運行的原理大概就是這個樣子。只要你遵循數據包的格式發送數據就一定可以成功的。
======================================================================================================
【手機遠控電腦 V3.0 Bate】分兩個模式:一個是短信模式,一個瀏覽器模式。
現在主要看看 瀏覽器模式。(手機或電腦的瀏覽器均可登錄操作...)
主界面:

這個是啟動之后的頁面,注意,內網的要在路由設置端口映射,然后在 希網動態域名或花生殼等 申請免費的動態域名。
再將域名指向自己的外網IP。手機就可以通過域名訪問連接到你的電腦。還有一點,ADSL 用戶要通外網是無法用 80 端口的。被營運商出于某種目的給故意屏蔽了。
由于采用 POST 方式,接收不到手機瀏覽器發送的口令(原因不詳),所以只能暫用GET 方式提交表單。

這個是【功能區】,暫時只有四個功能:【窗口管理】、【進程管理】、【重啟系統】、【關閉系統】。

這個是【窗口管理】頁面(粉紅色的是被隱藏的窗口):

這個是【進程管理】頁面:

|
|