抓包紅色_抓包三部曲 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529025.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529025.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529025.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機農業sci,IEEE旗下JCR1區智慧農業類SCIEI期刊

原標題:IEEE旗下JCR1區智慧農業類SCI&EI期刊各位學者,EA-ISET 協會(www.ea-iset.org)重點期刊推薦,IEEE旗下JCR1區智慧農業類SCI&EI期刊 ,版面有限,錄滿即止,具體信息如下:一、期刊信息JCR1區智慧農…

python 多條件 選擇 算法_python部署python算法 - 快速尋找滿足條件的兩個數

題目前提是一定存在這樣兩個數 解法一就不寫了...一般想不到吧 一開始想到的是解法二最后的用hash表 (其實是想到創建一個跟target一樣大的數組啦..存在就寫入index,但是要全部找出,那得二維數組,但是后面想到target要是很大的話&…

3d打印主要的切片參數類型_3D打印機切片參數詳情說明

在使用3D打印機的過程中,切片是一個我們無法避免要操作的步驟,接下來我們將簡單介紹一下切片的相關參數。底部類型設置模型打印第一層的類型,以適應不同打印需求Skirt模型底部不與模型接觸,確保擠出正常SkirtBrim與模型底部接觸&a…

西南科技大學研究生計算機,我們畢業啦……西南科技大學2020研究生畢業記!...

“各位旅客,列車前方到站是終點站,畢業。要下車的乘客,請帶好您的行李和貴重物品,準備下車。”每當畢業季來臨時,時間的流逝似乎開了倍速,掠過青春的云海,不因劇情的精彩而暫停。近日&#xff0…

決策樹和隨機森林算法 簡介

決策樹(Decision Tree) 是一種基礎的分類和回歸算法隨機森林 是由多棵決策樹集成在一起的集成學習算法 決策樹生成過程: 特征選擇決策樹生成決策樹剪枝 信息熵 用來衡量一個節點內信息的不確定性的。 信息熵越大, 不確定性越大, 樣本就越多樣, 樣本…

java 抽象類_什么是final?Java抽象類又是什么?抽象類能使用 final 修飾嗎?

第十三題講解人:張小龍 8.23郵箱:2304940425qq.com一.什么是final?final是java中的一個關鍵字,可以用來修飾變量、方法和類。用關鍵詞final修飾的域成為最終域。用關鍵詞final修飾的變量一旦賦值,就不能改變&…

mysql范式與反范式_MySQL 三種范式以及反范式 | 劍花煙雨江南

第一范式確保數據表中每列(字段)的原子性,即每個字段都是最小單位,不可拆分。如:用戶表(user)中的 user_name,password,nick_name。第二范式在第一范式的基礎上,保證表中的每列都與主鍵相關。如果一個關系滿…

查找微信公眾號服務器地址,手把手教大家搭建微信公眾號查題功能

最近比較主流的公眾號輸入查題功能比較火爆,現在手把手教大家搭建自己的公眾號查題。如下圖:準備:備案域名、服務器、公眾號域名備案、服務器申請、公眾號申請在這里就不單獨介紹了。1、配置PHP文件把兩個php代碼上傳服務器。更改api.php接口…

python更新excel內容_使用python將Excel表中的數據更新到數據庫中

代碼如下: # -*- coding: utf-8 -*- import pymysql import xlrd # 連接數據庫 try: db pymysql.connect(host"127.0.0.1", user"root", passwd"root", db" test", charsetutf8) except: print("could not connect t…

mysql 中文字符排序規則_mysql中字符集和排序規則說明

數據庫需要適應各種語言和字符就需要支持不同的字符集(Character Set),每種字符集也有各自的排序規則(Collation)。一.字符集字符集,即用于定義字符在數據庫中的編碼的集合。 常見的字符集:utf-8 gbk 等。二.排序規則數據庫中的排序規則用來定…

sql server服務器位置,SQL語句實現查詢SQL Server服務器名稱和IP地址

獲取服務器名稱:SELECT SERVERPROPERTY(MachineName)select SERVERNAMEselect HOST_NAME()獲取IP地址可以使用xp_cmdshell執行ipconfig命令:--開啟xp_cmdshellexec sp_configureshow advanced options, 1reconfigure with overrideexec sp_configurexp_c…

如何卸載MySQL8.0.11_win10安裝mysql8.0.11卸載5.7

卸載5.7的安裝方式是免安裝版本的,需要卸載。1、停止服務以管理員身份啟動cmd命令窗口net stop mysql或是任務管理器找到mysql服務停止。2、刪除sc delete mysql3、windowsR 開始運行里面輸入regedit,打開注冊表,有MySQL文件夾的對MySQL文件刪除HKEY_LOCAL_MACHINE/…

django項目如何連接前端_工作筆記前端小白如何搭建前端項目

“前言,來到杭州差不多有兩年左右了,大小小做過不少項目。之前都是有技術大佬在前面抗住、作為菜雞的本人只要在大佬后面聽大佬指揮摸魚劃水就行。最近公司接到一個新項目,由于大佬們紛紛出走,于是搭建前端框架的任務就落到本人的…

mysql編碼轉換工具_mysql編碼轉換搞定

按照下面做法,終于成功了!慶祝,紀念......背景:某個系統的mysql數據庫dnname采用默認的latin1字符集,系統升級需要將所有數據轉換成utf-8格式,目標數據庫為newdbname(建庫時使用utf8)方法一:步驟…

python基礎面試都問什么問題_基本 Python 面試問題

def Stack(object): def __init__(self): self.stack [] def push(self,value): # 進棧 self.stack.append(value) def pop(self): # 出棧 if self.stack: self.stack.pop() else: raise LookupError(stack is empty!) def is_empty(self): # 查看stack是否為空 reture bool(s…

按鈕點擊計數器存入mysql_按鈕點擊數統計計數器(PHP+MYSQL+JS)

公共頁面con.php <?php mysql_connect("localhost:3306","user","password") or die("數據庫連接失敗");mysql_select_db("click") or die("數據表連接失敗");mysql_query("set names gbk");?>…

es6去除重復項_Excel的去除重復項你真的明白原理嗎?淺嘗去除重復項的函數奧秘...

Excel函數學習&#xff1a;悟空百問の009&#xff1a;去除重復項的深入思考我們經常整理一些數據&#xff0c;數據不可以動原數據&#xff0c;又需要進行數據分析處理&#xff0c;整理&#xff0c;數據匯總&#xff0c;如何快速的找到這些重復的值&#xff0c;這成了我們很頭疼…

unit類型是什么?_面試官虛晃一槍:項目中有用過鎖嗎?能解釋一下什么是AQS?...

1 前言鎖是用來控制多個線程訪問共享資源的方式&#xff0c;一般來說&#xff0c;一個鎖能防止多個線程同時訪問共享資源(但是有些鎖可以允許多個線程并發的訪問共享資源&#xff0c;如讀寫鎖)。在以前&#xff0c;Java程序是靠synchronized來實現鎖功能的&#xff0c;而在Java…

瀏覽器里面看到的表單數據映射到python_python爬蟲入門01:教你在 Chrome 瀏覽器輕松抓包...

通過python爬蟲入門&#xff1a;什么是爬蟲&#xff0c;怎么玩爬蟲&#xff1f;我們知道了什么是爬蟲也知道了爬蟲的具體流程那么在我們要對某個網站進行爬取的時候要對其數據進行分析就要知道應該怎么請求就要知道獲取的數據是什么樣的所以我們要學會怎么抓咪咪&#xff01;哦…

sql查詢mysql參數配置_查詢參數配置

示例請求示例http(s)://rds.aliyuncs.com/?ActionDescribeParameters&DBInstanceIdrm-uf6wjk5xxxxxxx&正常返回示例XML 格式此選項設置服務器范圍內的默認填充因子值。提供填充因子是為了優化索引數據存儲和性能。fill factor50mssql2008r2此選項設置服務器范圍內的默…