whatsapp主要采用XMPP协议来做数据包组织。那么从XMPP的几个要点来分析whatsapp的协议。

1、出席(presence)

出席通知其他实体的网络可用性,并且使你能够知道其他实体是否在线和可用于通讯。它是一个在互联网上沟通和合作的催化剂,因为人们更容易与你交流,如果他们知道你是否在线。只有通过你授权的人才能看到你是否在线。这个授权被称为出席订阅。当你在线时,你向你的服务器宣告你的出席,然后服务器将你在线通知告诉你的联系人,并且获得他们的当前出席显示在你的客户端界面上。

那么在whatsapp上如何实现这些的了?

自己出席:

<presence type="available"></presence>

订阅用户请求:

<presence type="subscribe" to="6282111233677@s.whatsapp.net"></presence>

订阅用户响应:

<presence from="6282111233677@s.whatsapp.net" type="unavailable" last="1585729610"></presence>

用户上线通知:

<presence from="6282111233677@s.whatsapp.net" type="available" last="1585729610"></presence>

2、查询(iq)

查询(IQ)节提供了一种用于请求-应答交互和简单工作流的结构.
和<message/>节不同,一个IQ节能包含仅有一个有效载荷,用于定义处理的请求或接收人采用的行为。
发送IQ节的实体必须总是接收一个回复(通常由目的接收者或接受者的服务器产生)。
请求和应答通过使用id属性跟踪,id属性由请求实体生成,并被包含在应答的实体中
信息/查询type
get
请求实体信息,例如请求注册一个账户(类似于HTTP GET)。
set
请求实体提供一些信息或作出一个请求(类似于HTTP POST或PUT)。
result
应答实体返回get操作的结果(例如一个实体必须提供信息用来注册账户),或者确认一个set请求(类似于一个HTTP200状态码)。
error
应答实体或一个中间实体,例如XMPP服务器,通知请求实体它不能处理get或set请求(例如,因为请求的格式不正确,请求实体无权执行该操作等)。早期在HTTP中使用的数字错误代码已被可扩展错误条件的XML元素取代。

那么在whatsapp上的一些实际例子。

心跳请求:

<iq id="3" xmlns="w:p" type="get" to="s.whatsapp.net">

<ping>

</ping>

</iq>

心跳响应:

<iq from="s.whatsapp.net" type="result" id="3" t="1585729914">

</iq>

获取缩略图请求:

<iq id="2" xmlns="w:profile:picture" type="get" to="6285320652292@s.whatsapp.net">

<picture type="preview">

</picture>

</iq>

获取缩略图响应:

<iq from="s.whatsapp.net" type="error" id="1">

<error code="404" text="item-not-found">

</error>

</iq>

3、信息(ib)

信息(IB)节提供了服务器主动推送一些配置信息,客户端无需回复。

在whatsapp上的一些实际例子。

通知离线消息数量

<ib from="s.whatsapp.net">

<offline count="0">

</offline>

</ib>

通知路由信息

<ib from="s.whatsapp.net">

<edge_routing>

<routing_info>

【4】08080802

</routing_info>

<dns_domain>

【2】6662

</dns_domain>

</edge_routing>

</ib>

4、消息

<message/>节是使用基本的“push”方法从一个地方到另一个地方得到消息,消息是不可告知的,它是一种“fire-and-forget”的机制从一个地方到另一个地方快速获取信息。
消息的type
normal:单个的消息,对应的回应可能会或者可能不会很快到来。
chat:在两个实体间店实时对话中交换
groupchat:多用户聊天室中交换
headline:发送警告和通告,并不期望有回应
error:对先前发送消息发生错误,实体检测这个问题将返回一个类型error的消息。
消息的to:预期收件人的JabberID
消息的from:发送者的JabberID,from地址不由发送客户端提供,而是由发送者的服务器添加邮戳,以避免地址欺骗。
消息也包含有载荷元素。核心XMPP规格定义了一些非常基本的有效载荷,例如<body/>和<subject/>,被用于人对人的聊天信息,消息(和其他类的节)可以包含在核心XMPP规格中没有定义的有效载荷

在whatsapp上的一些实际例子。

新消息:

<message from="status@broadcast" type="text" edit="7" id="33BCB0CB4252B169674AD0F560A8F32D" participant="918128670245@s.whatsapp.net" phash="1:btMzxYFi" offline="0" t="1585729514" notify="geetusing276">

<enc v="2" type="skmsg">3308a1bdba970310051a5092600d3053b8dc373f68896ff2dec4e0fe9d6e0ffe1a34438e11f8510b9dd693762de8372e2b201aca6f789dc62690acaeb61d839d350872f1be4799569e833795a67a69374a78500852ddd208d1bf0d3dbeb48f31e61f8b3d18e4199e36dda7f50ac72aabdded1cf2006aafa4db366a8e207bf4a82bdd3df0f58b6dee518c703bb1495f3a3d4b7fc401458da0f90f06

</enc>

</message>

消息到达:

<receipt id="33BCB0CB4252B169674AD0F560A8F32D" to="status@broadcast" participant="918128670245@s.whatsapp.net">

</receipt>

-------------------------------工具推荐-------------------------------------

1、grouplus 帮助中心 Grouplus - WhatsApp Group Tools

2、WhatsApp群控机器测评(2)-WhatsApp群控工具

3、whatsapp群发工具

------------------------------交流-----------------------------------

技术交流QQ:226573882

whatsapp协议简单分析相关推荐

  1. TCP/IP 协议简单分析(建立连接握手过程)

    原文:http://hi.baidu.com/wuguoyana/blog/item/38c04d3bcf047ce43a87ce55.html 首先TCP和IP是两种不同的协议,它们来七层网络模型中 ...

  2. TCP/IP 协议简单分析

    首先TCP和IP是两种不同的协议,它们来七层网络模型中分别在不同的层次,IP协议是网络层的协议,TCP是更高一层的传输层的协议,TCP是建立在IP协议之上的,所以一般把TCP和IP连在一起说TCP/I ...

  3. whatsapp逆向协议--漏洞分析

    whatsapp逆向协议--漏洞分析Nangua120831 任何一个软件都不可能无懈可击,只要你用心去研究. WhatsApp也一样存在漏洞,whatsapp中的漏洞,可以利用其来发送私聊和群聊,还 ...

  4. iOS 之 Bonjour 协议简单抓包分析

    引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查阅了各种资料以及自己抓包分析该协议. 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进 ...

  5. UDP协议报文分析和主动发送UDP简单实现

    UDP协议报文分析和主动发送UDP简单实现 前言 一.Wireshark 报文解析 1.UDP报文实例 2.报文格式分析 ①.以太网头 ②.IP头 ③.UDP头 二.UDP主动传输数据的实现方式 1. ...

  6. 微信协议简单调研笔记

    前言 微信可调研点很多,这里仅仅从协议角度进行调研,会涉及到微信协议交换.消息收发等.所谓"弱水三千,只取一瓢"吧. 杂七杂八的,有些长,可直接拉到最后看结论好了. 一.微信协议概 ...

  7. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  8. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  9. UDT协议实现分析——连接的建立

    UDT Server在执行UDT::listen()之后,就可以接受其它节点的连接请求了.这里我们研究一下UDT连接建立的过程. 连接的发起 来看连接的发起方.如前面我们看到的那样,UDT Clien ...

最新文章

  1. SourceChangeWarning:验证集上准确率很高,但是测试集上很低
  2. 2017-2-19 C#基础 基本数据类型的转换,转义字符,常量
  3. 如何搭建一个node 工程
  4. MySQL卸干净与下载安装(2020最新版+亲测踩坑可用)
  5. c语言中元音字母对应的的值,全国计算机等级考试二级C语言南开上机百题改错题第59...
  6. Jzoj5245 Competing Souls
  7. 一双耐克出厂价70元,代工老板赚到900亿身家
  8. 面试官:Spring该选择哪个构造方法来进行实例化?画重点要考的
  9. Halcon PDF文档(hdevelop_users_guide)学习总结之一
  10. pandas rolling方法_Pandas处理时间序列数据的20个关键知识点
  11. django debug=false后静态文件丢失_Django DEBUG=False后DEBUG=True带来的问题
  12. php读取excel怎么读取sheet2,PHP读取Excel 之 Spreadsheet_Excel_Reader
  13. 老化测试相关知识点介绍
  14. 一、为什么会产生field概念 二、MBAFF
  15. vscode配置运行php项目完整版
  16. 【史上最全】国内外常用精品API汇总
  17. 怎样检测和应对数据集的Outliers
  18. Super含2021年度总结
  19. SEO优化 - 使用nginx301重定向顶级域名到www二级域名
  20. 阿里中间件seata源码剖析六:TCC模式中2阶段提交实现

热门文章

  1. AM335X PWMSS 驱动指导
  2. C++学习(涉及到Caffe使用)
  3. 《离散数学及其应用》第七章 第一节
  4. Globus INK 内部:欣赏下用于苏联航天的机械导航计算机
  5. 华为鸿蒙系统使用技巧,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  6. PLSQL9真正注册机
  7. 树莓派传输数据给OneNET(HTTP形式)
  8. MASH--超快速估计基因组距离
  9. 【Windows10】电脑副屏的指示箭头是什么?
  10. 对图像高频信号和低频信号的理解