精华内容
下载资源
问答
  • WebSocket协议与抓包
    2021-04-23 17:28:38

    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

    更多相关内容
  • 01-websocket简介及抓包分析

    千次阅读 2020-02-28 09:26:15
    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 抓包

    2021-05-18 17:19:23
    (2)刷新页面会得到一个ws链接。(3)点击链接可以查看链接详情测试网站...抓包Websocket1、fiddle配置 点击Rules选着Customize Rules,在FiddlerScript中找到如下代码进行调整在class...

    浏览器控制台

    (1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。

    (2)刷新页面会得到一个ws链接。

    (3)点击链接可以查看链接详情

    测试网站http://www.websocket.org/echo.html

    20200422010048991778.png

    fiddler抓包Websocket

    1、fiddle配置 点击Rules选着Customize Rules,在FiddlerScript中找到如下代码进行调整

    在class Handlers中加入以下代码

    static function OnWebSocketMessage(oMsg: WebSocketMessage) {

    // Log Message to the LOG tab

    FiddlerApplication.Log.LogString(oMsg.ToString());

    }

    2、保存后就可以在Fiddler右边栏的Log标签里

    20200422010049663679.png

    原文:https://www.cnblogs.com/dwdw/p/12749111.html

    展开全文
  • WebSocket 协议原理(抓包分析)

    千次阅读 2020-12-14 23:20:00
    WebSocket 协议原理抓包分析 这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程。 1.WebSocket 流程说明 **(1)**客户端服务器之间完成三次握手建立 TCP 连接(TLS/SSL)握手。 **(2)*...

    WebSocket 协议原理抓包分析

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

    1.WebSocket 流程说明

    • (1) 客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL)握手。
    • (2) 客户端发起 HTTP 请求和服务器之间建立 WebSocket 握手。
    • (3)WebSocket 连接建立之后,双方通信是基于 TCP 连接的,此后不需要 HTTP 协议了。
    • (4) 完成 WebSocket 握手之后,就可以发送消息内容了。

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

    在这里插入图片描述

    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 抓包数据

    在这里插入图片描述

    3.消息与数据帧说明

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

    4.WebSocket 协议格式

    4.1 WebSocket 协议的特点

    • 基于帧:不是基于流(HTTP、TCP)
    • 每一帧要么承载字符数据,要么承载二进制数据
    • 基于浏览器的同源策略,可以使用 Access-Control-Allow-Origin 等头部
    • 基于 URI、子协议支持同主机同端口上的多个服务

    4.2 帧格式示意图

    在这里插入图片描述

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

    抓取到的包数据如下图:
    在这里插入图片描述

    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 掩码,如下图所示:
    在这里插入图片描述

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

    4.5 缓存污染攻击示意图

    在这里插入图片描述

    在这里插入图片描述

    4.6 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 帧数据相同

    在这里插入图片描述

    6.如何关闭 WebSocket 会话

    6.1 关闭 WebSocket 会话

    • 控制帧中的关闭帧:在 TCP 连接之上的双向关闭。
    • 发送关闭帧后,不能再发送任何数据。
    • 接收关闭帧之后,不再接收任何到达的数据。
    • TCP 连接意外中断也会关闭 WebSocket。

    6.2 关闭帧的格式

    在这里插入图片描述

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

    6.3 关闭帧抓包

    在这里插入图片描述

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

    6.4 关闭帧的错误码

    在这里插入图片描述
    扫码关注爱因诗贤
    在这里插入图片描述

    展开全文
  • Websocket--抓包分析

    千次阅读 2019-03-05 09:47:40
    原来你是这样的Websocket--抓包分析 之前自己一个人负责完成了公司的消息推送服务,移动端配合...为了加深自己对Websocket协议的理解,自己通过进行抓包的方式学习了一番。现在分享出来,希...
  • 为了加深对Websocket协议的理解,通过进行抓包的方式学习了一番。现在分享出来,希望对大家能有所帮助。 1、Chrome控制台 (1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。 (2)刷新页面会得到一个ws...
  • WebSocket研究笔记-抓包分析

    千次阅读 2021-03-08 01:11:50
    WebSocket研究笔记-抓包分析随手记一个总图的分析展开websocket帧分析分析IP协议展开分析TCP 随手记 随手笔记,非正式文章,大概只有我能看懂自己的梦呓之言。 记录通过Wireshark抓包研究WebSocket协议的片段,...
  • 一、引语 互联网发展迅速,最初的网页是以文本为主,但很快就发展到使用大量的图片、音频、视频,并且对页面的...在这里我借助抓包软件Wireshark,图文并茂,辅助理解 一、抓包过程 抓包软件下载 Wireshark · G
  • Websocket--抓包分析--及原理分析

    千次阅读 2019-01-14 16:44:41
    同样在新的公司研发一款帧同步游戏,我们使用了websocket的通信协议,其实websocket也没有啥特殊的,就是建立在http协议的基础之上,看了下大致的原理,留作保存。 底层更不用说了,都是建立在tcp/ip协议栈的基础之...
  • 推荐WebSocket、Https移动端(iOS)抓包工具mitmproxy
  • Websocket--抓包分析Chrome+Fiddler

    千次阅读 2019-01-25 14:54:25
    为了加深自己对Websocket协议的理解,自己通过进行抓包的方式学习了一番。现在分享出来,希望对大家能有所帮助。 Chrome控制台 (1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。 (2)刷新页面会得到一...
  • websocket抓包

    2019-10-02 06:38:53
    https://www.cnblogs.com/xiaoniuzai/p/7588739.html http://blog.sina.com.cn/s/blog_12df1b9e60102vyeq.html 转载于:https://www.cnblogs.com/graybird/p/11301773.html
  • 在TCP协议关闭之前先关websocket,当服务器客户端都发送且收到关闭帧(opcode=8)时,表示websocket通信关闭。 http2.0 采用多路复用 支持服务器消息推送 使用二进制方式传输 进行标头压缩,使传输数据量大幅减少...
  • 为了加深自己对Websocket协议的理解,自己通过进行抓包的方式学习了一番。现在分享出来,希望对大家能有所帮助。 Chrome控制台 (1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。 (2)刷新页面会得到一...
  • WebSocket和Http的关系

    2020-03-31 23:24:58
    WebSocket和Http一样,都是一种应用层上的协议。它是HTML5中新加入的协议,是HTML5标准的一部分。WebSocket协议的产生主要是为了“即时通讯、替代轮询”,因为WebSocket协议提供了通过一个套接字实现全双工通信的...
  • WebSocket协议介绍/原理/由来 握手/消息传递的编码格式/心跳维持/关闭会话/WireShark的使用
  • 为了加深自己对Websocket协议的理解,自己通过进行抓包的方式学习了一番。现在分享出来,希望对大家能有所帮助。Chrome控制台(1)F12进入控制台,点击Network,选中ws栏,注意选中Filter。(2)刷新页面会得到一个ws...
  • charles配置抓取websocket包

    万次阅读 2020-07-06 16:38:05
    proxy->proxy Settings 勾选enable socket proxy ...问题:这样做的一个问题是,抓取http包时,就不了socket,因为两个端口不一样。 结果: 最后看到的是get post。不过这其实已经是websocket了。 ...
  • 所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议、Websocket、socket协议,一般来说,HTTP协议最多,Websocket是后起之秀,socket最少,而针对HTTP和websocket,Burp Suite工具是最...
  • wireshark如何抓取WebSocket数据包wireshark如何抓取WebSocket数据包前文WebSocket目前在web端使用广泛,可以使用websocket来传输数据,解决了web端无法跟服务器维持高效的长链接的问题。什么是websocket呢?...
  • 使用wireshark抓取websocket包和http的包

    万次阅读 2018-05-25 23:06:26
    由于我的是android手机,我这里就写的利用wiresharkandroid手机websocket(目前不知道ios是不是一样的) 一、共享一个WiFi 电脑需要共享一个WiFi出去,保证手机连的是电脑的网,我这里使用的是360免费WiFi(当然...
  • Websocket连接建立过程选择协议3次握手协议转换连接订阅消息推送与确认 选择协议 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下...
  • websocket协议主要就是两部分,1.http升级协议到websocket, ...到以下,其中蓝色的http协议切换,红色的是websocket包 第一个websocket包是服务器发过来的连接成功的指示 第二个是我主动的发过去的一个字符串 第
  • 我们可以使用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...
  • 如下图:Web 领域中,用于实现数据'实时'更新的手段有轮询 WebSocket 这两种。轮询指的是客户端按照一定时间间隔(如 1 秒)访问服务端接口,从而达到 '实时' 的效果,虽然看起来数据像是实时更新的,但实际上它有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,987
精华内容 1,194
关键字:

websocket和http抓包