| 序号 | 标题 | 链接 |
| — | :-- | --: |
| 1 | OICQ通信协议及抓包示例详解 | 百度文库 |
| 2 | QQ传输协议分析 | 码迷 |
| 3 | 网络协议数据获取与QQ协议分析 | 百度文库 |
| 4 | wireshark抓QQ包 | 百度文库 |
| 5 | QQ协议分析及还原 | 优快云 |
UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。
QQ客户端之间的消息传送也采用了UDP模式,这不同于国外的ICQ在客户端之间采用TCP进行通讯的模式。因为国内的网络环境非常复杂,而且很多用户采用的方式是通过代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来TCP连接的概率较小,严重影响传送信息的效率。而UDP包能够穿透大部分的代理服务器,因此我们在开发QQ的时候选择了UDP作为客户之间的主要通信协议,因此网友会觉得用QQ传送信息要比ICQ及其它采用TCP协议的ICQ类软件快。
当然,UDP协议优点突出,缺点也很明显:UDP包的传送是不可靠的传输,它不象TCP一样有包重传等机制,因此采用UDP协议的信息在传送过程中很容易丢失,这样就需要辅助的算法实现包重传机制以保证信息不会丢失,而QQ服务器的负荷非常重,因此在QQ 99b 0425之前我们只是在客户端到客户端之间传送消息时采用了这个辅助的机制,当消息在客户间直接传送无法到达时就需要通过服务器来中转,由于服务器端在老版本的时候迫于负荷过重的压力没有对主动发往客户端的信息进行传输控制,因此在老版本的时候容易造成通过服务器中转的信息丢失的现象。在QQ99c 0725之后我们单独设立出了几台专用的服务器采用包重传机制来中转消息(仅限于QQc之间传递的消息),确保通过服务器转发的消息也能够发送到对方的QQ。
2、OICQ通讯协议说明 协议分析网
协议说明:
协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成
发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。
OICQ用户到OICQ服务器的通讯协议引导符(0x81+0x0A+0x01)
报文类型报文内容报文说明
0x01昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否允许
0x02服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身
0x03服务号(L)+对方服务号(L)+内容(S)发送信息到某人
0x04服务号(L)+组号(L)+内容(S)广播信息,组号=0为全体
0x05服务号(L)+朋友服务号(L)查看朋友资料
0x06服务号(L)+组名称(S)增加组
0x07服务号(L)+组编号(T)+组名称(S)修改组名称
0x08服务号(L)+组编号(T)删除组
0x09服务号(L)+移动人数(T)+{朋友服务号(L)+目的组号(T)}移动组成员
0x0a服务号(L)+起始编号(L)+回传个数(T)+查找标志(T)看谁在线上查找标志1=向小找2=向大找
0x0b服务号(L)+SQL语句(S)自定义查找
0x0c服务号(L)+朋友服务号(L)增加好友
0x0d服务号(L)+朋友服务号(L)+加入原因(S)请求加入好友
0x0e服务号(L)+朋友服务号(L)删除好友
0x10服务号(L)+显示模式(T)更改显示方式1上线2隐藏3免打扰4离线
0x11服务号(L)+监视服务号(L)监视某人谈话
0x12服务号(L)+昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+
地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)+身份验证(T)更改用户基本信息
0x13服务号(L)+朋友服务号(L)+文件名(S)+文件长度(L)请求发送文件
0x14服务号(L)+朋友服务号(L)+允许/拒绝是否允许发送文件
0x15服务号(L)+朋友服务号(L)+文件内容(B)发送文件
0x16服务号(L)连接测试报文
0x17服务号(L)+朋友服务号(L)+同意标志(T)应答对方请求加入好友0=拒绝1=同意
OICQ服务器到OICQ的通讯协议
报文类型报文内容报文说明
0x01成功/失败(T)+服务号(L)新用户注册结果返回
0x02成功/失败(T)+组个数(T)+{组名称(S)+组编号(T)+朋友个数(T)+{朋友服务号(L)+肖像编号(T)+朋友状态(T)+朋友昵称(S)}老用户注册结果返回朋友状态1=上线=2隐藏=3免打扰4离线
0x03标志(T)+朋友服务号(L)+信息(S)+信息类型(T)标志1=系统2=用户发送消息,服务号=0是系统消息1=用户某某已经把你加为好友2=用户某某请求你通过身份验证3=用户某某同意了你的验证要求4=用户某某拒绝了你的验证请求
0x04成功/失败(T)+朋友服务号(L)+昵称(S)+肖像(M)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱好(S)+说明(S)朋友信息回送
0x05成功/失败(T)+组编号(T)+组名称(S)增加组结果回送1/0
0x06成功/失败(T)+组编号(T)+组名称(S)修改组名称结果回送1/0
0x07成功/失败(T)+组编号(T)删除组结果回送1/0
0x08成功/失败(T)移动组成员结果回送1/0
0x09成功/失败(T)+在线个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)}查找在线人员结果回送
0x0a成功/失败(T)+找到个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)}自定义查找结果回送(最多50)
0x0b标志(T)+朋友服务号(L)增加好友结果回送标志0=数据库失败=1成功=2需要身份验证=3对方不允许加入=4需要身份验证且不在线
0x0c朋友服务号(L)+昵称(S)+肖像号(M)+朋友状态(T)给在线用户增加好友
0x0e成功/失败(T)+朋友服务号(L)删除好友结果回送
0x10服务号(L)+显示模式(T)显示模式回送=1上线=2隐藏=3免打扰4离线
0x11成功/失败更改用户基本信息结果回送
0x12朋友服务号(L)+文件名(S)+文件长度(L)请求发送文件
0x13朋友服务号(L)+允许/拒绝是否允许发送文件1允许0拒绝
0x14朋友服务号(L)+文件内容(B)发送文件
0x15朋友服务号(L)+当前状态(T)朋友状态回送(系统发送)=1上线=2隐藏=3免打扰4离线
0x16服务号(L)连接测试
3、QQ服务器的IP地址及QQ的端口号
QQ端口4000以上,所以封住4000以上端口,qq的通信就无法进行。至于服务器
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
(探测QQ服务器IP地址教你如何禁止QQ聊天),QQ服务器分为三类:
UDP 8000端口类13个
速度最快,服务器最多。 QQ上线会向这11个服务器发送UDP数据包,选择回复速度最快的一个作为连接服务器。
这6个服务器名字均以SZ开头,域后缀是tencent.com,域名与IP对应为
sz sz2 : 61.144.238.145 61.144.238.146 61.144.238.156
sz3 sz4 sz6 sz7 : 202.104.129.251 202.104.129.254 202.104.129.252 202.104.129.253
sz5 : 61.141.194.203 202.96.170.166 218.18.95.221 219.133.45.15 61.141.194.224 202.96.170.164
TCP HTTP连接服务器4个
使用HTTP 80 和443端口连接这4个服务器名字均以tcpconn开头,域后缀是tencent.com,域名与IP对应为
tcpconn tcpconn3 218.17.209.23
tcpconn2 tcpconn4 218.18.95.153
61.141.194.227 218.18.95.171
会员VIP登陆服务器
使用HTTP 443安全连接 服务器IP 218.17.209.42