QQ文字聊天协议分析

QQ文字聊天协议分析

一、打开QQ客户端,出现登录界面并查看相关进程

启动QQ客户端后,使用如下命令查看本机所有网络连接的详细信息:

netstat -ano

通过筛选掉 127.0.0.1 的本地回环地址,可以锁定与外部通信的QQ进程。如下图所示,PID为 20136 的进程处于 ESTABLISHED 状态,使用的是 TCP 协议,并连接了外部端口号为 32176 的服务。

二、点击登录,再次查看进程信息

登录操作完成后,观察到如下变化: •系统中新增加了两个与 QQ 相关的进程; •原先 PID 为 20136 的进程新增了两个 ESTABLISHED 状态的 TCP 连接。

这说明 QQ 在登录后与多个服务器建立连接以维持服务。

三、选择一位好友,打开其聊天窗口

进一步操作——打开某位好友的聊天窗口。再次执行 netstat -ano,发现: •新增了一个 QQ 子进程; •但只有 PID 为 20136 的进程仍然显示活跃的网络连接,说明实际网络通信由此主进程统一完成。

与QQ相关的进程只有PID为20136这一个有网络状态的显示

四、在wireshark中添加过滤信息,进行抓包分析

在向好友发送两条文字消息后,Wireshark 显示出每条消息会触发 4 个 TCP 包:

PSH + ACK

ACK

PSH + ACK

ACK

五、打开wireshark的追踪流的TCP Stream

使用 Wireshark 的 Follow TCP Stream 功能,可以聚焦分析 QQ 与服务器之间的完整通信会话。

在其中看见了自己的QQ号2286581631

图中红色部分为本机发出的数据,蓝色表示本机收到的消息。

出现了Hearbeat.Alive心跳请求

心跳请求是客户端和服务器之间定期发送的一种“保活消息”,用于检测双方是否还在线、网络连接是否仍然有效,间隔一段时间发出一个包,如果对方回应,就说明连接还活着。

还出现client_conn_seq和后面的数字,是客户端连接序列号

但是数据本体已通过加密,无法直接获取明文内容。

六、总结

通过本次实验抓包分析可以确认,QQ客户端的文字消息传输是基于TCP协议实现的。这体现在以下几个方面:

Wireshark 抓包显示消息传输由多个 TCP 报文构成: 每发送一条文字消息,都会产生多个 TCP 数据包,依次完成数据推送(PSH)、确认(ACK)等步骤,体现出 TCP 的可靠性和有序传输特性。

使用 TCP Stream 追踪通信会话: Wireshark 中的 “Follow TCP Stream” 功能仅适用于 TCP 连接,而我们成功通过此功能观察到 QQ 消息通信过程,进一步验证其基于 TCP。

因此可以明确,QQ 的聊天协议(不论是否加密)是建立在 TCP 传输层之上的应用层协议。

尽管具体应用层协议未公开,但其底层传输通道可以明确为 TCP。