QQ传输协议分析
2015-06-16 16:27:07
一、 实验目的:
在虚拟机下NAT模式下通过Wireshark抓包,分析QQ的传输模式。了解QQ在传输信息过程中用到的协议。分析在Nat模式下,信息传输的穿透性。
二、 实验环境:
Win7 专业版32位(在虚拟机里面)。
Win7 旗舰版64位(物理机)
QQ版本:TM2013
Wireshark
三、 实验内容:
1、 QQ登录
1)、UDP登录
在虚拟机的win7打开QQ面板,设置登录服务器的类型为UDP

启动wireshark,然后开始登录QQ,登录成功等待一会儿停止wireshark的抓包。
抓包如图:

我们可以看到本地向远程登录服务器183.60.48.174发送了一个UDP的数据包,这个就是IP就是在刚才设置UDP登录时的系统默认IP,还可以看到这个IP返回了一个UDP的数据包。看来这两个包就应该是登录验证的包,接下来的几个包的服务器IP变成了183.60.48.165,由于这个IP和登录服务器的IP位于统一网段,因此我们可以猜测这个IP是腾讯用来存储我们发送的信息的服务器。需要注意的是,在多次实验下,可以发现服务器不止183.60.48.165这一个,这是因为想QQ这样的大吞吐量的信息交互,必须用多台服务器分流,所以这个IP并不一定是某一个。下面的一些包应该就是心跳包。那个OIQC协议就是QQ用的协议,其实实际上也是一个UDP包。下面的DNS协议就是因为我的QQ是在虚拟机里面登录的,在向外网交互信息的时候会通过网关192.168.214.2解析。
我们来分析一下登录时候的UDP包

从这个图我们可以得知源和目的的IP,mac地址,还有双方的端口号等等一些信息。
数据链路层:

目的MAC地址:00 50 56 e3 56 95
本机MAC地址: 00 0c 29 ba 59 3c
网络层:

通过查询资料和分析我们知道:
45:版本IPv4,首部长度20字节
00:区分服务
00-73:总长度175字节
36-1e:标识
00-00:标志和偏移
80:生存时间128
11:传输协议UDP(17)
传输层:

0f-a0:源端口4000
1f-40:目的端口8000
009b:长度155字节
7f-c4:检验和
QQ的数据

通过查询资料和分析我们知道:
02:QQ报文的开头
34-20:QQ客户端的版本号,实验所用版本为QQTM2013
08-25:用户请求登陆的命令的序号
67-dc:发送数据的序号
56-a6-d2-5c:用户QQ号码,实验中为1453773404
之后的内容为加密的数据内容
最后一个字节03:QQ报文的结尾
2)、TCP登录
设置如图:

启动wireshark,然后开始登录QQ,登录成功等待一会儿停止wireshark的抓包。
抓包如图:

可以看到几个TCP的包还有一个SSL的包
对TCP包分析如图:

通过对UDP协议的分析,我们可以看到数据层和网络层的十六进制代码和之前的一模一样,这里我们就值分析传输层的TCP协议了,如图:

通过查询资料和分析我们知道:
C4-5e:源端口号50270
01- bb:目的端口443
45-34-fc-63:序号
00-00-00-00:确认号
80-02:数据偏移,标志
20-00:窗口大小8192字节
7f-3b:检验和
00-00:紧急指针
其余部分为可选字段和填充字节
在TCP协议里面我们没有看到QQ的登录验证消息。为什么呢?一看这里还有一个SSL协议,QQ会不会是通过SSL验证的呢?
SSL((Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。)
那么我们来看看这个包:

02:QQ报文的开头
34-20:QQ客户端的版本号,实验所用版本为QQTM2013
08-25:用户请求登陆的命令的序号
67-dc:发送数据的序号
56-a6-d2-5c:用户QQ号码,实验中为1453773404
之后的内容为加密的数据内容
最后一个字节03:QQ报文的结尾
可见,这个包的信息和UDP登录时候的一样,那么TCP登录是确实使用了SSL。
2、 心跳消息数据包

如图,通过IP地址查询,可以知道119.147.45.40是广东深圳的IP,而深圳是腾讯的老巢。在多次的抓包中也可以看到这个IP段,所以我们有理由相信,这个IP段是腾讯的。
那么我们打开来看看。

看到这里,确实有很熟悉哦。通过查阅资料和分析我们知道:
通过查询资料和分析我们知道:
02:QQ报文的开头
34-20:QQ客户端的版本号,实验所用版本为QQTM2013
00-58:用户在线的命令序号
3b-09:发送数据的序号
56-a6-d2-5c:用户QQ号码,实验中为1453773404
之后的内容为加密的数据内容
最后一个字节03:QQ报文的结尾
3、 收发信息数据包
对方在线的时候

我们看看第一个包:

可以看到蓝色字体那里的02是QQ报文的开头,这里需要注意的就是00-cd是客户端向服务器发送消息的命令序号,1b-db是发送数据序号,其他的都一样。通过几次实验发现,00-cd客户端向服务器发送消息的命令序号是固定的,而1b-db发送数据序号是会改变的。
而且没每送一个包,服务器是会回复一个包给客户端的。
四、实验总结:
通过实验我还发现QQ貌似是会和每一个在线好友建立一个连接,因为当我登录只有一个好友的QQ时,wireshark抓到的包就几个,而登录有上百好友的QQ时,发现连接数也有数百个。
PS:这是去年10月份我们老师给我们讲网络协议时,自己做的一次对QQ协议的分析,当时自己对于协议也不是很明白,但是通过查阅资料,还是独立完成了这么一次分析,由于时间过得太久,当时查阅的资料早已忘记出处。真的很感谢网络上前辈们、朋友们的无私分享,我们今天才得以有那么多资料查阅,衷心感谢!还要感谢姚老师的指导。文中有错之处,还望批评指出,在此先谢过!
QQ传输协议分析的更多相关文章
- MySQL应用层传输协议分析
001.在MySQL应用层传输协议中主要有如下三种类型的数据: 01.整数类型. 02.字符串类型. 03.描述数据包. 002.MySQL应用层传输协议中对整型的说明: 01.固定长度的整型---- ...
- secureCRT 中各种传输协议分析 启动daemon运行守护进程(转)
转载链接:http://blog.sina.com.cn/s/blog_61798d5d01018yk4.html [Telnet]著名的终端访问协议,传统的网络服务程序,如FTP.POP和Telne ...
- 协议分析TMP
最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0, 所用到的TCP ...
- Thrift的TCompactProtocol紧凑型二进制协议分析
Thrift的紧凑型传输协议分析: 用一张图说明一下Thrift的TCompactProtocol中各个数据类型是怎么表示的. 报文格式编码: bool类型: 一个字节. 如果bool型的字段是结构体 ...
- 协议分析之qq协议---qq登录
QQ 协议分析:获取各类登录会话密钥 我们知道QQ的一些会话密钥是在登录过程中生成的,尤其是Session Key,有了它便可以解密出聊天文本内容.本文主要是了解一下QQ的加密机制,首先是用嗅探工具W ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- APP账号密码传输安全分析
最近在搞公司的安卓APP测试(ThinkDrive 企邮云网盘)测试,安卓app测试时使用代理抓包,发现所此app使用HTTP传输账号密码,且密码只是普通MD5加密,存在安全隐患,无法 ...
- 蓝牙接收苹果手机通知 ANCS协议分析
蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...
- 【转】QQ传输文件原理参考(来自互联网)
QQ的文件发送是怎样的过程呢?通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话.随即,发送计 ...
随机推荐
- 精彩 JavaScript 代码片段
1. 根据给定的条件在原有的数组上,得到所需要的新数组. ——<JavaScript 王者归来> var a = [-1,-1,1,2,-2,-2,-3,-3,3,-3]; functio ...
- WebSocket异常 通常每个套接字地址(协议/网络地址/端口)只允许使用一次
websocket的实例:http://blog.csdn.net/for_cxc/article/details/51500185 问题: 新建一个连接通信没有问题,但是如果关闭再建立就会报错:通常 ...
- alienware Win8 系统安装
原作者网名 alienware-小来: 我的外星人 老是装系统出错.我觉得写的不错.把原作者的东西拿过来.. 对于win7系统的用户来说想要体验下win8.1系统,或者是原来win8.1系统加装固态后 ...
- openresty 前端开发入门二
这一章主要介绍介绍怎么获取请求参数,并且处理之后返回数据 我们知道http请求通常分为两种,分别是GET,POST,在http协议中,GET参数通常会紧跟在uri后面,而POST请求参数则包含在请求体 ...
- Struts2框架简介和示例
struts2框架 Struts2是java web的框架,在Java Web开发中,表示层框架,其核心是通过扩展Servlet来帮助处理http请求. Struct2的基本流程 Struct2的框架 ...
- C - NP-Hard Problem(二分图判定-染色法)
C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144 ...
- iOS版打地鼠游戏源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- easyui表格的增删改查
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- MYSQL数据库的优化
我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...
- 将自己的项目上传到github保管
一.首先需要生成gey-gen,因为github跟本地计算机要通过ssh传输的,详情见官方教程. 二.本地已有项目的情况:现在本地将项目git innit 初始化好,然后去到github上面初始化一个 ...