Centos7利用pyshark解析QUIC报文

2023-10-27

一:环境准备

        利用pyshark解析报文,如果是http,https等常见的协议,正常的版本一般也能搞定,但是如果解析比较新的协议,比如我这次要解析QUIC就得使用比较新的tshark版本。

        本次实践的环境是Centos7,装的tshark版本是3.2.3,采用的是源码安装方式

1,下载安装包

http://ftp.uni-kl.de/pub/wireshark/src/all-versions/wireshark-3.2.3.tar.xz

2,安装依赖

yum install cmake3 libpcap libgcrypt-devel glib2-devel qt-devel qt5-qtbase-devel qt5-linguist qt5-qtmultimedia-devel qt5-qtsvg-devel libcap-devel libcap-ng-devel gnutls-devel krb5-devel libxml2-devel lua-devel lz4-devel snappy-devel spandsp-devel libssh2-devel bcg729-devel libmaxminddb-devel sbc-devel libsmi-devel libnl3-devel libnghttp2-devel libssh-devel libpcap-devel c-ares-devel redhat-rpm-config rpm-build gtk+-devel gtk3-devel desktop-file-utils portaudio-devel rubygem-asciidoctor docbook5-style-xsl docbook-style-xsl systemd-devel gcc gcc-c++ flex bison doxygen gettext-devel libxslt cmake

3,源码安装wireshark

tar -xvf wireshark-3.2.3.tar.xz 
cd wireshark-3.2.3
cmake3 .
make -i -j 16 
make install

注意:安装的过程中不要把上述的几个命令粘贴复制就不管了,特别是cmake3执行的时候,会检查需要的库和依赖,在cmake3结束的时候会给提示成功或者失败

比如我就遇到不少错误,但是提示也很明显

 上面如果都顺利执行完了以后,检查一下tshark版本

[root@g7j9z sbin]# tshark -v
Running as user "root" and group "root". This could be dangerous.
TShark (Wireshark) 3.2.3 (Git commit f39b50865a13)

Copyright 1998-2020 Gerald Combs <gerald@wireshark.org> and contributors.
License GPLv2+: GNU GPL version 2 or later <https://www.gnu.org/licenses/gpl-2.0.html>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with libpcap, with POSIX capabilities (Linux), with libnl 3,
with GLib 2.56.1, with zlib 1.2.7, with SMI 0.4.8, with c-ares 1.10.0, with Lua
5.1.4, with GnuTLS 3.3.29, with Gcrypt 1.5.3, with MIT Kerberos, with MaxMind DB
resolver, with nghttp2 1.33.0, without brotli, with LZ4, without Zstandard, with
Snappy, with libxml2 2.9.1.

Running on Linux 3.10.0-327.el7.x86_64, with Intel(R) Xeon(R) CPU E5-2630 v4 @
2.20GHz (with SSE4.2), with 322184 MB of physical memory, with locale
en_US.UTF-8, with libpcap version 1.5.3, with GnuTLS 3.3.29, with Gcrypt 1.5.3,
with zlib 1.2.7, binary plugins supported (0 loaded).

Built using gcc 4.8.5 20150623 (Red Hat 4.8.5-44).

4,安装pyshark

[root@g7j9z quicParas]# pip3 install pyshark
Collecting pyshark
  Downloading https://mirrors.zte.com.cn/pypi/packages/e5/96/ebc5fb6cd63242c6851acdfa8a0ac14fbaec2d6c53f6d64d0a5ca06cd1af/pyshark-0.4.3-py3-none-any.whl
Collecting py (from pyshark)
  Downloading https://mirrors.zte.com.cn/pypi/packages/67/32/6fe01cfc3d1a27c92fdbcdfc3f67856da8cbadf0dd9f2e18055202b2dc62/py-1.10.0-py2.py3-none-any.whl (97kB)
    100% |████████████████████████████████| 102kB 2.8MB/s
Collecting lxml (from pyshark)
  Downloading https://mirrors.zte.com.cn/pypi/packages/bd/78/56a7c88a57d0d14945472535d0df9fb4bbad7d34ede658ec7961635c790e/lxml-4.6.2-cp36-cp36m-manylinux1_x86_64.whl (5.5MB)
    100% |████████████████████████████████| 5.5MB 3.5MB/s
Installing collected packages: py, lxml, pyshark
Successfully installed lxml-4.6.2 py-1.10.0 pyshark-0.4.3

二:解析QUIC

        本次解析的quic版本是Q023,其他版本的QUIC没有做尝试

        可以先看看wireshark打开的报文

 接下来就是尝试用pyshark去解包了

1,打开本地的pcap文件

cap = pyshark.FileCapture('./gquic_q023.pcap')[0]

我们这次只取报文的第一个包做实验,取索引0

2,定位到QUIC的应用层

我们可以先看看支持哪些属性和方法

>>> cap = pyshark.FileCapture('./gquic_q023.pcap')[0]
>>> dir(cap)
['__bool__', '__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_packet_string', 'captured_length', 'eth', 'frame_info', 'get_multiple_layers', 'get_raw_packet', 'gquic', 'highest_layer', 'interface_captured', 'ip', 'layers', 'length', 'number', 'pretty_print', 'show', 'sniff_time', 'sniff_timestamp', 'transport_layer', 'udp']
>>>

里面有个highest_layer就是定位到应用层

我们可以打印一下

>>> cap.highest_layer
'GQUIC'

3,获取QUIC层码流

cap[cap.highest_layer]

我们可以打印一下解析出来的QUIC字段

 比如我们想要获取QUIC的SNI字段,就可以直接调用

>>> cap[cap.highest_layer].tag_sni
'www.googleapis.com'
>>>

接下来看一个完整的上述分析代码及其打印

import pyshark

# 打开存储的捕获文件
cap = pyshark.FileCapture('./gquic_q023.pcap')[0]
print("*****************GQUIC LAYER PRINT*******************")
print(cap[cap.highest_layer])
print("*****************GQUIC LAYER PRINT*******************")
print("QUIC SNI:",cap[cap.highest_layer].tag_sni)
[root@g7j9z quicParas]# python3 quicParac.py
*****************GQUIC LAYER PRINT*******************
Layer GQUIC:
        Public Flags: 0x0d
        .... ...1 = Version: Yes
        .... ..0. = Reset: No
        .... 11.. = CID Length: 8 Bytes (0x3)
        ..00 .... = Packet Number Length: 1 Byte (0x0)
        .0.. .... = Multipath: No
        0... .... = Reserved: 0x0
        CID: 10123107773473542882
        Version: Q023
        Packet Number: 1
        Message Authentication Hash: 020e7c2363fc8725a6caf935
        Private Flags: 0x01
        .... ...1 = Entropy: Yes
        .... ..0. = FEC Group: No
        .... .0.. = FEC: No
        0000 0... = Reserved: 0x00
        STREAM (Special Frame Type) Stream ID: 1, Type: CHLO (Client Hello)
        Frame Type: STREAM (Special Frame Type) (0xa0)
        1... .... = Stream: True
        .0.. .... = FIN: False
        ..1. .... = Data Length: 2 Bytes
        ...0 00.. = Offset Length: 0 Byte (0)
        .... ..00 = Stream Length: 1 Byte (0)
        Stream ID: 1 (Reserved for (G)QUIC handshake, crypto, config updates...)
        Data Length: 1300
        Tag: CHLO (Client Hello)
        Tag Number: 5
        Padding: 0000
        Tag/value: PAD (Padding) (l=1210)
        Tag Type: PAD (Padding)
        Tag offset end: 1210
        Tag length: 1210
        Tag/value: 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d\xe2\x80\xa6
        Padding: 2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d\xe2\x80\xa6
        Server Name Indication: www.googleapis.com
        Version: Q023
        Common certificate sets: 0x399ff95340f7fec9
        Proof demand: X509
        Padding Length: 18
        Padding: 000000000000000000000000000000000000
        PADDING Length: 18
        Frame Type: PADDING (0x00)
        Tag/value: SNI (Server Name Indication) (l=18): www.googleapis.com
        Tag/value: VER (Version) (l=4): Q023
        Tag/value: CCS (Common Certificate Sets) (l=16)
        Tag/value: PDMD (Proof Demand) (l=4): X509
        Tag Type: SNI (Server Name Indication)
        Tag Type: VER (Version)
        Tag Type: CCS (Common Certificate Sets)
        Tag Type: PDMD (Proof Demand)
        Tag offset end: 1228
        Tag offset end: 1232
        Tag offset end: 1248
        Tag offset end: 1252
        Tag length: 18
        Tag length: 4
        Tag length: 16
        Tag length: 4
        Tag/value: 7777772e676f6f676c65617069732e636f6d
        Tag/value: 51303233
        Tag/value: 399ff95340f7fec97b26e9e7e45c71ff
        Tag/value: 58353039
        Common certificate sets: 0x7b26e9e7e45c71ff

*****************GQUIC LAYER PRINT*******************
QUIC SNI: www.googleapis.com

三:总结

        用过scapy的看到上面是不是有种非常熟悉的感觉,PyShark的强大在于可以调用tshark内建的所有数据包解码器,本文只是以pyshark来进行解包举例,其用途可不止如此,还可以使用pyshark在网络接口上进行嗅探。另外需要注意的是随着协议在不断的更新,由于其解码功能依赖tshark,如果需要解析比较新的协议,就需要同步升级tshark(前提是新版本支持解析的情况)。毕竟技术在发展,我们也要勤动手进行更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Centos7利用pyshark解析QUIC报文 的相关文章

随机推荐

  • 【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 近年来 随着可再生能源的并网以及非线性负载
  • jenkins 踩坑

    ERROR Failed to parse POMs org apache maven project ProjectBuildingException Some problems were encountered while proces
  • java 加载驱动3种方法_加载jdbc驱动程序的三种不同方式

    1 比较常用 try Class forName com mysql jdbc Driver 加载数据库驱动 String url jdbc mysql localhost 3306 databasename 数据库连接子协议 databa
  • React:通过嵌套对象循环

    问题描述 我正在从strapi 获取数据 我的导航对象的响应如下所示 简化 id 1 title Home order 1 items id 2 title 3D Assets order 1 items id 4 title 3D Pla
  • Linux下OpenCV摄像头录像(c++)

    opencv 从摄像头中读取视频并保存 c 版 YouthDance CSDN博客 opencv 保存摄像头视频 参考如上 CMakeLists txt cmake版本 cmake minimum required VERSION 2 8
  • 【Android】上拉加载更多,下拉刷新数据快速实现

    项目需求 在页面数据中 每次只显示一部分 当手指操作从下往上滑动时 进行请求加载更多数据 当从上往下滑动时 进行整个所有数据的刷新 需求实现 1 引入依赖 刷新 implementation com scwang smart refresh
  • 【满分】【华为OD机试真题2023 JAVA&JS】学校的位置

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 学校的位置 知识点数组贪心排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 为了解决新学期学生暴涨的问题 小乐村要建所新学校 考虑到学生上学安全问题 需要所有
  • 【电商数仓】数仓调度之全流程调度(调度数据准备、Azkaban部署、创建数据库和表、Sqoop导出脚本、编写工作流程配置文件、一些注意事项)

    1082条消息 电商数仓 数仓调度之全流程调度 调度数据准备 Azkaban部署 创建数据库和表 Sqoop导出脚本 编写工作流程配置文件 一些注意事项 数仓权限系统和调度系统搭建 OneTenTwo76的博客 CSDN博客
  • uniApp动态更改页面顶部标题

    需求 多个功能公用一个页面 根据上个页面传递过来的参数动态更改顶部标题 onLoad option if option type permit uni setNavigationBarTitle title 许可证页面 else if op
  • ST7701芯片820*320屏幕移植stemwin

    简要说明 如题 公司最近更换820 320屏幕 移植stemwin 使用3线spi通讯 16RGB 这屏幕工作流程为 首先通过3线spi发送初始化指令 之后通过16bitRGB发送像素点 移植过程参考了安富莱 野火 https www nx
  • python爬虫selenium被检测处理(适用淘宝登录)

    1 增加这个是防止检测是webdriver谷歌驱动调起的请求 通用大部分 self chrome execute cdp cmd Page addScriptToEvaluateOnNewDocument source Object def
  • RandomAccessFile 实现文件分片获取发送和写入

    在实现文件上传的过程发现由于文件太大会导致程序接收和发送都出现问题 所以想着实现一个分片发送和写入的方法方便实现大文件上传 查了一些资料 在随机文件流操作时RandomAccessFile 恰好可以满足我的要求 这里主要是如何用Random
  • 怎么使用input执行xss攻击_XSS场景及修复方案总结

    xss原理 跨站脚本攻击 Cross Site Scripting 缩写为XSS 恶意攻击者往Web页面里插入恶意javaScript代码 当用户浏览该页之时 嵌入其中Web里面的javaScript代码会被执行 从而达到恶意攻击用户的目的
  • 大专生学Java真没出路吗?

    现在市场上的众多移动应用 大部分都是用Java做后台开发的 我们大家所熟知的支付宝 美团 淘宝 京东等都是用Java来做后台的 这么多互联网公司对Java如此青睐 这样也就助推Java的生态变得越来的越好 毕竟有大厂背书 生态越好 Java
  • 防范明文密码和散列值抓取

    一 单机密码抓取的防范方法 微软为了防止用户密码在内存中以明文形式泄露 发不了补丁KB2871997 关闭了Wdigest功能 windows server 2012以上版本默认关闭Wdigest 使攻击者无法从内存中获取明文密码 对于wi
  • openerp/odoo 权限解析

    前言 odoo权限管理主要分为4类 1 菜单权限 即未指定的用户组看不到该菜单 缺点 不安全 只是隐藏菜单 若用户知道菜单的id一样可以通过url查看菜单 2 对象级别 即有权限的对象才能有某种功能比如 增删改查的权限 3 记录级别权限 即
  • STM32 GPIO的配置寄存器

    1 STM32 GPIO的配置寄存器 CRL CRH 快速学习 39度C的博客 CSDN博客 配置寄存器 2 STM32 BSRR BRR ODR寄存器详情解析 存储技术 电子发烧友网 3 STM32 GPIO篇 一直在路上的Tom的博客
  • Mysql的redo log详解

    1 介绍 redo日志是在事务提交后生成的 如果此时服务down掉 后期重启可以用redo日志恢复数据 保证事务的持久性 事务提交后永久生效 2 redo日志生成流程 第1步 先将原始数据从磁盘中读入内存中来 修改数据的内存拷贝第2步 生成
  • synchronized () 括号中应该传什么对象?

    我看jdk源码的时候发现了这样的代码 同步锁中传入了静态的自定义的类 Lock 1 这种写法和直接传this有什么区别 2 类 Lock 定义成静态和不定义成静态有什么区别 对于代码块同步 也就是synchronized lock 这样的写
  • Centos7利用pyshark解析QUIC报文

    一 环境准备 利用pyshark解析报文 如果是http https等常见的协议 正常的版本一般也能搞定 但是如果解析比较新的协议 比如我这次要解析QUIC就得使用比较新的tshark版本 本次实践的环境是Centos7 装的tshark版