精华内容
下载资源
问答
  • WebSocket协议WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器WebSocket连接必须由...

    WebSocket协议

    WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器

    WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,格式如下:

    GET ws://localhost:3000/ws/chat HTTP/1.1

    Host: localhost

    Upgrade: websocket

    Connection: Upgrade

    Origin: http://localhost:3000

    Sec-WebSocket-Key: client-random-string

    Sec-WebSocket-Version: 13

    该请求和普通的HTTP请求有几点不同:

    GET请求的地址不是类似/path/,而是以ws://开头的地址;

    请求头Upgrade: websocket和Connection: Upgrade表示这个连接将要被转换为WebSocket连接;

    Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;

    Sec-WebSocket-Version指定了WebSocket的协议版本

    随后,服务器如果接受该请求,就会返回如下响应:

    HTTP/1.1 101 Switching Protocols

    Upgrade: websocket

    Connection: Upgrade

    Sec-WebSocket-Accept: server-random-string

    该响应代码101表示本次连接的HTTP协议即将被更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。

    版本号和子协议规定了双方能理解的数据格式,以及是否支持压缩等等。如果仅使用WebSocket的API,就不需关心这些

    HTTP协议、WebSocket协议与TCP协议的关系

    HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制限制了全双工通信。WebSocket连接建立以后,其实只是简单规定了一下:接下来,咱们通信就不使用HTTP协议了,直接互相发数据吧。

    安全的WebSocket连接机制和HTTPS类似。首先,浏览器用wss://xxx创建WebSocket连接时,会先通过HTTPS创建安全的连接,然后,该HTTPS连接升级为WebSocket连接,底层通信走的仍然是安全的SSL/TLS协议

    fiddler抓取WebSocket数据

    fiddler中双击WebSocket Session即可查看此连接收发的数据

    dd66efaa96d54f6584f9d0473b273d6c.png

    标签:协议,Upgrade,HTTP,Sec,WebSocket,连接

    来源: https://www.cnblogs.com/SitVen/p/11665064.html

    展开全文
  • 这篇文章通过抓包分析WebSocket协议的细节,学习一下WebSocket执行流程。1.WebSocket 流程说明(1)客户端服务器之间完成三次握手建立TCP连接(TLS/SSL)握手。(2)客户端发起HTTP请求服务器之间建立WebSocket握手。...

    这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程。

    1.WebSocket 流程说明

    • (1)客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL)握手。

    • (2)客户端发起 HTTP 请求和服务器之间建立 WebSocket 握手。

    • (3)WebSocket 连接建立之后,双方通信是基于 TCP 连接的,此后不需要 HTTP 协议了。

    • (4)完成 WebSocket 握手之后,就可以发送消息内容了。

    2.HTTP 建立 WebSocket 握手(HTTP 升级到 WebSocket)

    cab9ea17605178767f89b3f49fdaa558.png

    Tips:其中红色部分为必须,完成如上图所示过程即建立了 WebSocket 连接,Sec-WebSocket-Key: 5C2dTYo3LMpWd/H+Nix4HQ==\r\n 表示建立握手生成的随机串。

    2.1 如何证明握手被服务器接受

    从上图可以看到构建 WebSocket 握手的时候,发送了一个 Sec-WebSocket-Key

    #请求中的 Sec-WebSocket-Key 随机数
    Sec-WebSocket-Key:c3SkgVxVCDhVCp69PJFf3A==

    #响应中的 Sec-WebSocket-Accept 证明值
    Sec-WebSocket-Accept:YzgwZjRlZTcxMThiYTdjNDliYzAyNTdmZmNlN2E5MzBmYzNiYTQ0Mg==

    2.2 Sec-WebSocket-Accept 证明值构造规则

    • GUID(RFC4122):258EAFA5-E914-47DA-95CA-C5AB0DC85B11

    • 值构造规则:BASE64(SHA1(Sec-WebSocket-Key+GUID))

    • 拼接值:c3SkgVxVCDhVCp69PJFf3A==258EAFA5-E914-47DA-95CA-C5AB0DC85B11

    • SHA1值:c80f4ee7118ba7c49bc0257ffce7a930fc3ba442

    • BASE64值:YzgwZjRlZTcxMThiYTdjNDliYzAyNTdmZmNlN2E5MzBmYzNiYTQ0Mg==

    2.3 抓包数据

    48f5ac7a1ddf9ca1b5a372618568319a.png

    3.消息与数据帧说明

    • Message 消息:1 条消息由一个或者多个帧组成,这些数据帧属于同一类型,代理服务器可能合并、拆分消息的数据帧。

    • Frame 数据帧:持续帧、文本帧、二进制帧

    4.WebSocket 协议格式

    4.1 WebSocket 协议的特点

    • 基于帧:不是基于流(HTTP、TCP)

    • 每一帧要么承载字符数据,要么承载二进制数据

    • 基于浏览器的同源策略,可以使用 Access-Control-Allow-Origin 等头部

    • 基于 URI、子协议支持同主机同端口上的多个服务

    4.2 帧格式示意图

    365bbf2d41b11c005b66358c1991463e.png

    Tips:图中蓝色的 2 字节是必然存在的帧首部。

    抓取到的包数据如下图:895c88d895cb5b5cc3d02ab8f6188816.png

    Tips:可以在百度搜索 WebSocket 在线测试,然后使用 Wireshark 工具抓取。

    4.3 帧类型

    从上图抓取到的数据包可以看到帧首部中有 Opcode,它表示 帧类型,下面列出不同类型的帧对应的 Opcode 的值:

    • 持续帧:0

    • 非控制帧:1:文本帧,2:二进制帧,3-7:为非控制帧保留

    • 控制帧:8:关闭帧,9:心跳帧ping,A:心跳帧pong,B-F:为控制帧保留

      Tips:从 3.2 中可以看出 Opcode 的值为 1,表示文本帧。

    4.4 MASK 掩码作用

    从上面的图中可以看到 WebSocket 每次发送消息的时候帧首部会有MASK 掩码,如下图所示:71e0357559066f2e9d11579441b3b156.png

    Tips:MASK 的作用是为了防止缓存污染攻击,防止伪造 WebSocket 请求。

    4.5 ABNF 描述的帧格式

    ws-frame = frame-fin;1 bit int length
    frame-rsv1;1 bit in length
    frame-rsv2;1 bit in length
    frame-rsv3;1 bit in length
    frame-masked;1 bit in length
    frame-payload-length;3 种长度
    [frame-masking-key];32 bits in length
    frame-payload-data;n*8 bits in;length,where;n >= 0

    5.如何保持会话心跳

    HTTP 长连接是基于定时器维持的会话,若在定时器设置的时间范围内,还没有数据到达,就会自动断开,而 WebSocket 连接保持会话是基于心跳的;

    5.1 心跳帧

    心跳帧是可以穿插在数据帧中传输的

    • ping 帧Opcode=9,可以含有数据

    • pong帧Opcode=A,必须与 ping 帧数据相同

    63cd8a47c8580afb88b1710b91975811.png

    6.如何关闭 WebSocket 会话

    6.1 关闭 WebSocket 会话

    • 控制帧中的关闭帧:在 TCP 连接之上的双向关闭。

    • 发送关闭帧后,不能再发送任何数据。

    • 接收关闭帧之后,不再接收任何到达的数据。

    • TCP 连接意外中断也会关闭 WebSocket。

    6.2 关闭帧的格式

    4714d0fc64d76002083d04d45cf598d3.png

    • 关闭帧:Opcode=8

    • 可以含有数据,但仅用于解释关闭会话的原因,前 2 字节为无符号整型,遵循 mask 掩码规则。

    6.3 关闭帧抓包

    59a68bea34019fc90439c5218eb8ce41.png

    Tips:从抓包软件中可以看出 TCP 连接是在 WebSocket 关闭之后再关闭的。

    6.4 关闭帧的错误码

    bb2471c57e4a0ca5374cabc3a3f6630c.png

    986fe1b20f7f7de9c2e6e0b5bf58f8ca.gif

    展开全文
  • WebSocket协议与抓包

    2019-10-12 20:39:26
    WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器 WebSocket连接必须由浏览器发起,因为...

    WebSocket协议

    WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器

    WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求,格式如下:

    GET ws://localhost:3000/ws/chat HTTP/1.1
    Host: localhost
    Upgrade: websocket
    Connection: Upgrade
    Origin: http://localhost:3000
    Sec-WebSocket-Key: client-random-string
    Sec-WebSocket-Version: 13

    该请求和普通的HTTP请求有几点不同:

    1. GET请求的地址不是类似/path/,而是以ws://开头的地址;
    2. 请求头Upgrade: websocketConnection: Upgrade表示这个连接将要被转换为WebSocket连接;
    3. Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;
    4. Sec-WebSocket-Version指定了WebSocket的协议版本

    随后,服务器如果接受该请求,就会返回如下响应:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: server-random-string

    该响应代码101表示本次连接的HTTP协议即将被更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。

    版本号和子协议规定了双方能理解的数据格式,以及是否支持压缩等等。如果仅使用WebSocket的API,就不需关心这些


    HTTP协议、WebSocket协议与TCP协议的关系

    HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制限制了全双工通信。WebSocket连接建立以后,其实只是简单规定了一下:接下来,咱们通信就不使用HTTP协议了,直接互相发数据吧。

    安全的WebSocket连接机制和HTTPS类似。首先,浏览器用wss://xxx创建WebSocket连接时,会先通过HTTPS创建安全的连接,然后,该HTTPS连接升级为WebSocket连接,底层通信走的仍然是安全的SSL/TLS协议


    fiddler抓取WebSocket数据

    fiddler中双击WebSocket Session即可查看此连接收发的数据(其他配置参考:fiddler抓包与断点调试)

    参考文章

    展开全文
  • 01-ws框架测试 1 websocket简介 websocket是一种网络传输协议,可在单个tcp链接上进行全双工通信,位于OSI模型的应用层。 WebSocketHTTP/2 一样,都...WebSocket使得客户端服务器之间的数据交换变得更加简单,...

    01-ws框架测试

    1 websocket简介

    websocket是一种网络传输协议,可在单个tcp链接上进行全双工通信,位于OSI模型的应用层。

    WebSocket 与 HTTP/2 一样,都是为了解决 HTTP 某方面的缺陷而诞生的。HTTP/2 针对的是“队头阻塞”,而 WebSocket 针对的是“请求 - 应答”通信模式。

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

    WebSocket协议在2011年由IETF标准化为RFC 6455,后由RFC 7936补充规范。

    • RFC6455
    • RFC7936

    WebSocket是一种与HTTP不同的协议。两者都位于OSI模型的应用层,并且都依赖于传输层的TCP协议。 虽然它们不同,但RFC 6455规定:“WebSocket设计为通过80和443端口工作,以及支持HTTP代理和中介”,从而使其与HTTP协议兼容。 为了实现兼容性,WebSocket握手使用HTTP Upgrade头[1]从HTTP协议更改为WebSocket协议。

    WebSocket协议支持Web浏览器(或其他客户端应用程序)与Web服务器之间的交互,具有较低的开销,便于实现客户端与服务器的实时数据传输。 服务器可以通过标准化的方式来实现,而无需客户端首先请求内容,并允许消息在保持连接打开的同时来回传递。通过这种方式,可以在客户端和服务器之间进行双向持续对话。 通信通过TCP端口80或443完成,这在防火墙阻止非Web网络连接的环境下是有益的。另外,Comet之类的技术以非标准化的方式实现了类似的双向通信。

    1.1 websocket特点

    websocket的特点如下所示:

    • 提供全双工通信;
    • 还可以在TCP之上启用消息流;
    • WebSocket协议规范将ws(WebSocket)和wss(WebSocket Secure)定义为两个新的统一资源标识符(URI)方案,分别对应明文和加密连接。
    • WebSocket 的默认端口也选择了 80 和 443,因为现在互联网上的防火墙屏蔽了绝大多数的端口,只对 HTTP 的 80、443 端口“放行”,所以 WebSocket 就可以“伪装”成 HTTP 协议,比较容易地“穿透”防火墙,与服务器建立连接。
    • WebSocket 更侧重于“实时通信”,而 HTTP/2 更侧重于提高传输效率。

    1.2 服务器支持框架

    在服务器方面,网上都有不同对websocket支持的服务器:

    1.3 websocket 帧结构

    在这里插入图片描述

    结束标志位 + 操作码 + 帧长度 + 掩码

    • 第一位“FIN”:相当于 HTTP/2 里的“END_STREAM”,表示数据发送完毕。一个消息可以拆成多个帧,接收方看到“FIN”后,就可以把前面的帧拼起来,组成完整的消息。
    • “FIN”后面的三个位是保留位,目前没有任何意义,但必须是 0。
    • “Opcode”,操作码:其实就是帧类型,比如 1 表示帧内容是纯文本,2 表示帧内容是二进制数据,8 是关闭连接,9 和 10 分别是连接保活的 PING 和 PONG。
    • 掩码标志位“MASK”:表示帧内容是否使用异或操作(xor)做简单的加密。目前的 WebSocket 标准规定,客户端发送数据必须使用掩码,而服务器发送则必须不使用掩码。
    • Payload len”:表示帧内容的长度。它是另一种变长编码,最少 7 位,最多是 7+64 位,也就是额外增加 8 个字节,所以一个 WebSocket 帧最大是 2^64。
    • Masking-key”:掩码密钥,它是由上面的标志位“MASK”决定的,如果使用掩码就是 4 个字节的随机数,否则就不存在。

    2 websocket握手过程

    如下所示是笔者根据netty ws样例进行浏览器浏览的一个用例,可以看到这个websocket链接可以分为三个阶段:

    1. 建立tcp链接;
    2. 客户单采用http头进行ws握手;
    3. 协议由http切换成ws传输数据;

    在这里插入图片描述

    2.1 客户端的第一个GET

    如下图所示是客户端websocket链接的第一个报文。

    WebSocket 的握手是一个标准的 HTTP GET 请求,但要带上两个协议升级的专用头字段:

    • “Connection: Upgrade”,表示要求协议“升级”;
    • “Upgrade: websocket”,表示要“升级”成 WebSocket 协议。

    另外,为了防止普通的 HTTP 消息被“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段(所谓的“挑战”,Challenge):

    • Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥;
    • Sec-WebSocket-Version:协议的版本号,当前必须是 13。
      在这里插入图片描述

    2.2 服务端响应 SwitchingProtocol

    服务器收到 HTTP 请求报文,看到上面的四个字段,就知道这不是一个普通的 GET 请求,而是 WebSocket 的升级请求,于是就不走普通的 HTTP 处理流程,而是构造一个特殊的“101 Switching Protocols”响应报文,通知客户端,接下来就不用 HTTP 了,全改用 WebSocket 协议通信。(有点像 TLS 的“Change Cipher Spec”)

    WebSocket 的握手响应报文也是有特殊格式的,要用字段“Sec-WebSocket-Accept”验证客户端请求报文,同样也是为了防止误连接。

    具体的做法是把请求头里“Sec-WebSocket-Key”的值,加上一个专用的 UUID “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,再计算 SHA-1 摘要。

    在这里插入图片描述

    客户端收到响应报文,就可以用同样的算法,比对值是否相等,如果相等,就说明返回的报文确实是刚才握手时连接的服务器,认证成功。

    握手完成,后续传输的数据就不再是 HTTP 报文,而是 WebSocket 格式的二进制帧了。

    2.3 客户端ws报文

    客户端和服务端编码则更好验证了之前开头的总结:

    WebSocket 的帧头就四个部分:“结束标志位 + 操作码 + 帧长度 + 掩码”;

    在这里插入图片描述

    2.4 服务端ws回复

    在这里插入图片描述

    展开全文
  • WebSocket 协议原理抓包分析 这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程。 1.WebSocket 流程说明 **(1)**客户端服务器之间完成三次握手建立 TCP 连接(TLS/SSL)握手。 **(2)*...
  • 使用wireshark抓取websocket包和http

    万次阅读 2018-05-25 23:06:26
    由于我的是android手机,我这里就写的利用wiresharkandroid手机websocket(目前不知道ios是不是一样的) 一、共享一个WiFi 电脑需要共享一个WiFi出去,保证手机连的是电脑的网,我这里使用的是360免费WiFi(当然...
  • WebSocketHTTP 与 TCP

    2020-01-16 11:31:25
    WebSocketHTTP 与 TCP 从上面的图中可以看出,HTTPWebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。我们可以把这些高级协议理解成对 TCP 的封装。...更详细内容可阅读:wireshark抓包...
  • http和websocket并不能说是完全平等完全分开的两样东西,websocket准确地来说应该算是http的下属一个分类。http和websocket都是基于tcp协议的,都要经过三次握手。但是httpwebsocket的区别在于一个是单向的,一个...
  • HttpCanary是Android平台下功能最强大的抓包和注入工具,支持HTTP、HTTPS、HTTP2和WebSocket等多种协议。 无需Root,抓包时不会影响其它App的使用。 支持HTTP1.0、HTTP1.1、HTTP2、HTTPS和WebSocket等协议抓包。 ...
  • 我先从抽象的层面,举一个可能不太恰当的例子,只为了让不明白HTTP和WebSocket两者之间抓包有何区别的同学大概了解这两个协议的异同。客户端/服务端用C/S简称,我把数据抽象成水流,而HTTP是用...
  • 参考: WebSocket、Socket、TCP、HTTP区别 TCP、UDP详解 fiddler抓包工具使用
  • 我们可以使用emq自带的Dashboard插件,进行websocket调试,打开谷歌浏览...http://192.168.83.128:18083/#/websocket 用户名:admin,密码:public WebSocket URI:ws(s)://192.168.83.128:8083/mqtt TCP URI:tc...
  • Http、Socket请求实用抓包方法

    千次阅读 2019-02-01 15:12:12
    我先从抽象的层面,举一个可能不太恰当的例子,只为了让不明白HTTP和WebSocket两者之间抓包有何区别的同学大概了解这两个协议的异同。客户端/服务端用C/S简称,我把数据抽象成水流,而HTTP是用水枪传递水流...
  • 背景:以为微信用的是websocket,试一下想抓包看下。现在做网页游戏开发的同学,肯定会使用到WebSocket来通讯,毕竟相对于长轮询iFrame等方式,WebSocket给我们开了一扇大门,更简单快捷。From:...
  • 本实例通过抓包(客户端http/https 请求)来判定埋点日志是是否接入正确。 实现细节:使用django项目,后端采用python mitmdump 扩展脚本“log_handler.py”实时抓取与过滤4399SDK 客户端日志,将数据处理成约定...
  • 1. Smsniff 整个讲解过程中,主要用到Smsniff这个软件(网络数据包拦截软件[抓包工具]),用于监测、查看电脑与外界网络的通信数据包。 二、HTTP基础知识 1. HTTP协议的请求响应过程(通常情况通过一次TCP连接...
  • 用web抓包调试代理工具时,经常会遇到...当然有,本文将讲下如何用whistleproxifier抓包调试任意客户端的网络请求,不仅支持普通的web请求(HTTP、HTTPS、WebSocket),也支持TCP请求。 先简单介绍下whistleproxi...
  • Smsniff 整个讲解过程中,主要用到Smsniff这个软件(网络数据包拦截软件[抓包工具]),用于监测、查看电脑与外界网络的通信数据包。二、HTTP基础知识1.HTTP协议的请求响应过程(通常情况通过一次TCP连接完成)①例子...
  • 一 复习目标1 复习上一节使用wireshark抓包分析了WebSocket流量包含连接的建立:HTTP协议升级WebSocket协议使用建立完成的WebSocket协议发送数据2 目标协议对比初始握手计算响应键值消息格式关闭握手注:...
  • Jmeter——Jmeter之Websocket测试

    千次阅读 2018-02-10 00:25:10
    一、Websocket是一种持久化连接,先通过http协议建立一次连接,在连接中通过...向服务器发送请求无需再次建立http连接1、简单的从接口层分析下Websocket和http的区别Headers:Upgrade和Connection表明了请求类型...
  • 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象。 WebSocket能实现客户端服务器间双向、基于消息的文本或二进制的数据传输。 HTTP握手机制用于协商连接参数 二进制消息分帧...
  • 上一节使用wireshark抓包分析了WebSocket流量 包含连接的建立:HTTP协议升级WebSocket协议 使用建立完成的WebSocket协议发送数据 2 目标 协议对比 初始握手计算响应键值 消息格式 关闭握手 注:WebSocket服务器...
  • 1.客户端代码: package main import( "golang.org/x/...net/http" "flag" ) type WSServer struct { ListenAddr string } func (this *WSServer)handler(conn *websocket.Con...
  • 所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议、Websocket、socket协议,一般来说,HTTP协议最多,Websocket是后起之秀,socket最少,而针对HTTP和websocket,Burp Suite工具是最...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

websocket和http抓包