公司要禁止QQ?【我們從協議開始分析】

 自從騰訊公司1999模仿ICQ,推出OICQ後,一時間QQ的小企鵝佔領了幾乎所有中國所有電腦的桌面,因此QQ通訊的協議也引起了網絡監控界的關心,因爲要禁止或者阻止QQ,必須需要分析QQ的協議,僅僅通過添加QQ的服務器是行不通的,因爲QQ的服務器可以無限制的增加,一般人不可以隨時跟蹤到QQ服務器的變化,而禁止QQ。

 
1、 QQ登陸 
    要禁止QQ必須知道QQ連接服務器的方式,它主要有3種方式:1.通過本機UDP:4001開始的端口連接服務器UDP 8000端口;2.通過本機任意端口連接服務器80端口;3.通過通過本機任意端口連接服務器443端口。 
 
2、QQ定時器: 
QQ大約每相隔20秒左右迴向服務器發送一個心跳信息。 
 
包頭(QQ通過UDP傳輸時,包頭具有以下格式): 
 
前7個字節是包頭,包頭可以識別包的內容。包頭的格式爲:
 
第0字節:包標識:0x02。
 
第1-2字節:發送者標識。如果是0x01 0x00,表明是由服務器發送。
客戶端的標識與所使用的使用的QQ版本有關,目前最新版本QQ2005(0x0c57)的標識爲0x0c 0x57。
具體的協議的格式與這個字段所標識的客戶端版本有關。目前我們以這個最新的0A1D版本來討論。
 
第3-4字節:命令編號。具體的命令編號含義在下面有描述。
如果這個字段是0x00 0x01,那麼這是一個註銷請求包。如果這個字段是0x00 0x22,
而發送者標識是0x01 0x00,那麼這是一個登錄應答包。如果這個字段是0x00 0x22,而發送者標識是其它(例如0x0A 0x1D),
那麼這是一個登錄請求包。其它的命令代碼表明是其它包,我們通過發送者標識來區分它是CSP還是SSP。
 
第5-6字節:命令序列號。客戶端和服務器都有各自的當前發送序列號。每初始發出一個指令的時候,
使用當前的序列號,然後把當前序列號加一,如果超過0xFFFF,就繞回。如果是響應對方發出的命令,則使用這個命令的序列號。
例如,客戶端當前的序列號爲0x1110,它向服務發送一個0x0016命令,
它使用0x1110這個序列號,服務器收到以後,返回一個序列號爲0x1110的0x0016命令響應。
下一次,客戶端又發送一個0x0026命令,這一次它使用加一了的序列號0x1111,服務器也響應0x1111序列號的一個0x0026命令響應。
如果這是服務器要向客戶端發送0x0017命令,它使用它自己的當前序列號,比如說0x2220,客戶端收到以後,
也響應一個序列號爲0x2220的0x0017命令應答。
我們可以通過序列號來判斷髮出的指令是否已經得到了應答,如果沒有,可以重發。服務器對收到的命令的序列號
順序沒有要求。服務器也不會一定按照發出的順序給予應答。
 
QQ命令定義:
0x0001 註銷登錄
0x0002 心跳信息(禁止QQ,這個命令相當重要)
0x0004 更改用戶信息(包括密碼等)
0x0005 搜索用戶
0x0006 獲取用戶信息
0x0009 添加好友--不需認證
0x000a 刪除好友
0x000b 添加好友--需要認證
0x000d 改變狀態
0x0012 確認收到系統消息
0x0016 發送消息(禁止QQ,這個命令相當重要)
0x0017 收到消息(禁止QQ,這個命令相當重要)
0x001a 未知
0x001c 在對方好友列表上刪除自己
0x001d 未知
0x0022 登錄
0x0026 獲取好友清單
0x0027 獲取在線好友
0x0030 羣操作指令
0x0080 收到系統消息
0x0081 收到好友狀態改變消息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章