Scapy:处理部分 TLS 段

2024-02-28

我正在尝试使用 Scapy 从 pcap 中提取 TLS 元数据。我能够成功解析数据包和单个消息,例如 client-hello、server-hello 等及其字段。我遇到的问题是当 TLS 记录分布在多个 TCP 数据包/段时。这种情况主要发生在大型 TLS 消息中,例如应用程序数据或服务器在一个 TLS 帧中发送多个 TLS 消息(服务器问候、证书等)时。在这种情况下,scapy 表示它具有 TLS/SSLv2 层,但我无法从此类帧中提取任何有意义的信息。当我在wireshark中查看相同的pcap时,wireshark显示

Reassembled TCP segments (T bytes): #X (x), #Y(y), #Z(z)

其中 T 是合计; X、Y、Z 是帧 ID,x、y、z 是每个帧中构成总 T 的字节数。Wireshark 在解析 TLS 帧之前会重新组装整个 TLS 负载。

我的代码中有这样的东西:

if pkt.haslayer(TCP) and pkt.haslayer(TLS):
  parseTLS(pkt)
elif pkt.haslayer(TCP) and pkt.haslayer(SSLv2):
  parseSSLv2(pkt)

当遇到部分 TLS 数据包时,代码始终会转至 SSLv2。有没有一种方法可以让我像wireshark一样准确地将数据包识别为部分tls-segment并累积然后处理完整的TLS帧?如果是这样,我该怎么办。任何指示或帮助表示赞赏。谢谢。


不确定是否有更好的解决方案,但这就是我为解决问题所做的事情。累积的帧大小似乎与 Wireshark 从多个数据包重新组装 TLS 帧时所做的一致。

Note:此解决方案假设不存在乱序数据包或重复数据包。此外,此处显示的解决方案并不完整。下面的代码仅显示了当 TLS 帧跨越单个 TCP 流的多个 IP 数据包时如何累积 TLS 帧。请关注Janus's https://stackoverflow.com/users/1214974/janus-varmarken建议(在下面的评论中提到)或提出您自己的解决方案来积累不同的流。

def extractDataFromPcap(pcapfile):
  load_layer("tls")

  try:
    reader = PcapReader(pcapfile)

    # tls frame accumulation related variables.
    tls_accumulate = False
    tls_leftover_len = 0
    tls_blist = list()

    for pkt in reader:
      try:
        if tls_accumulate and pkt.haslayer(TCP):
          ip_tcp_hdr_overhead = ((pkt[IP].ihl*4) + (pkt[TCP].dataofs*4))
          pkt_payload_len = (pkt[IP].len - ip_tcp_hdr_overhead)
          tls_leftover_len = (tls_leftover_len - pkt_payload_len)
          tls_blist.append(raw(pkt[TCP].payload))

          if tls_leftover_len <= 0:
            # got complete TLS frame
            tls_raw_bytes = b''.join(tls_blist)

            # parse accumulated frame.
            tls = TLS(tls_raw_bytes)
            #... process tls object

            # reset accumlation variables.
            tls_accumulate = False
            tls_leftover_len = 0
            tls_blist = list()
          else:
            continue

        if pkt.haslayer(TCP) and pkt.haslayer(TLS):
          if not tls_accumulate:
            # Process new TLS frame.
            # Pkt over head: ip-hdr-len + tcp-hdr-len
            ip_tcp_hdr_overhead = ((pkt[IP].ihl*4) + (pkt[TCP].dataofs*4))
            pkt_payload_len = (pkt[IP].len - ip_tcp_hdr_overhead)
            if pkt[TLS].len > pkt_payload_len:
              # partial TLS frame. Start accumulating.
              tls_accumulate = True
              tls_leftover_len = (pkt[TLS].len - pkt_payload_len)
              tls_blist.append(raw(pkt[TCP].payload))
            else:
              # complete TLS frame
              # ... process complete TLS Frame 
      except Exception as error:
        pkt.show()
        print("tcp-processing error: %s", error)
        sys.exit(-1)

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

Scapy:处理部分 TLS 段 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 如何在 Grails 集成测试中制作两个内容不同的帖子

    我正在测试一个控制器 我无法发表两个内容不同的帖子 下面是一个示例 其中我使用一些数据 post1 使用 json1 执行到 cardController 的发布 然后 我使用不同的数据执行另一篇文章 post2 和 json2 但我无法成
  • 鼠标悬停时出现棘手的延迟

    这就是我目前所拥有的 cart summary mouseenter function flycart delay 500 slideDown fast flycart mouseleave function flycart delay 5
  • SQL Server 查询:使用 JOIN 包含 NULL 值

    我需要有关以下 SQL Server 查询的帮助 其中列 a TAProfileID 和 c CountryCode 在数据库中具有 NULL 值 我希望我的 JOIN 语句返回 NULL 值 如果存在 SELECT a Reservati
  • 比较表中的行对

    我可以在比较同一个表中的行的查询上使用一些补救帮助 我正在修改我们的代码以推送到 Postgres 并建立了一个测试床来使用我们的旧代码和新代码进行推送 行数很好 但这并不能告诉我数据是否相同 为此 我意识到我可以使用内置功能来获取行的哈希
  • 在 json 字符串化数组对象时排除对象属性

    嘿我有一个像这样的数组对象 public public private private properties instance 这里最外面的数组包含 A 类的对象 它有一些公共 props 一些私有 porps 它还包含一个包含 B 类对象
  • 为什么 .gitignore 不包含以 ! 为前缀的文件

    我的 gitignore 文件内容如下 build glucosia xcodeproj glucosia xcodeproj project pbxproj core plot framework build core plot fram
  • 由于某些许可证尚未被接受,无法安装以下 Android SDK 包

    我需要在我的 Android 项目中集成一个持续集成系统 我发现 CodeShip 是一个很好的选择 因此我创建并配置了一个项目来使用以下脚本编译我的 Android 应用程序 Install java 8 jdk switcher hom
  • 实体框架中的自引用/父子关系

    我读了很多程序员的帖子 其中涉及到无法确定相关操作的有效顺序 由于外键约束 模型要求或存储生成的值 可能会存在依赖关系 在实体框架中使用自引用关系时出现异常 我正在努力建立亲子关系 public class Category public
  • 在 mySQL 中插入带有特殊字符的 JSON 编码值失败

    我正在尝试使用 PDO 执行此查询 UPDATE categories SET keywords bg keyword1 u0431 u044a u043b u0433 u0430 u0440 u0441 u043a u0438 WHERE
  • 如何检测用户是否选择取消InputBox VBA Excel

    我有一个输入框要求用户输入日期 如果用户单击 取消 或关闭输入对话框而不是按 确定 如何让程序知道停止 就像是if str vbCancel then exit sub 目前 用户可以点击 确定 或 取消 但程序仍然运行 str Input
  • Pandas scatter_matrix - 绘制分类变量

    我正在查看 Kaggle 竞赛中著名的泰坦尼克号数据集 http www kaggle com c titanic gettingStarted data http www kaggle com c titanic gettingStart
  • 使用Mercurial (hg),如何只推送一个文件或一个目录?

    使用 Mercurial 我们可以使用以下命令提交一个文件 hg commit file rb 或 1 个文件夹 hg commit foldername 但是我们如何才能只推出 1 个文件或 1 个文件夹呢 整个项目可以使用 hg pus
  • Flutter:ClipRRect 与带有 BoxDecoration 的容器

    我知道 ClipRRect 有其他选项 例如自定义剪辑器 但如果我只需要一个简单的边界半径 性能上有什么区别吗 哪一款更值得推荐呢 如果您的目标是创建圆形边框 则必须仅在最后一种情况下使用剪裁器 此时容器可能无济于事 例如 图像可以在圆形边
  • Java servlet - 会话清理 (HttpServletRequest)

    关于 java servlet 的一般问题以及处理请求的最佳方法 如果我从远程服务器请求中调用 doGet 方法 protected void doGet HttpServletRequest request HttpServletResp
  • 学习 Javascript 与 jQuery

    我拿到了 Wrox Beginning JavaScript 3rd Edition 并想从头开始学习它 然后我的老板走过来说 何必呢 学习 jQuery 尽管我是一个新手 对 ASP net vb net 一些 C 和基本 HTML 的了
  • 如何在CRM 2011中从多对多实体关系中创建和删除数据?

    如何在crm 2011中从多对多实体关系中创建和删除数据 Code QueryExpression qry new QueryExpression qry EntityName entity1 entity2 qry ColumnSet n
  • 更新模型时如何更新counter_cache?

    我有一个简单的关系 class Item belongs to container counter cache gt true end class Container has many items end 假设我有两个容器 我创建一个项目并
  • x86 asm 中 NOT 指令的简单示例

    有人能解释一下 x86 汇编器中 NOT 指令的具体作用吗 在我所知道的编程语言中 NOT 用于检查特定状态是否不正确 例如 if Isset var 但在汇编器中 运算符似乎做了其他事情 我不明白操作数到底是做什么用的 有人可以用一个简单
  • 错误 TS1127:在 Angular 7 中运行 Karma 测试时出现无效字符

    我收到错误error TS1127 Invalid character在 Visual Studio Code 终端中 为 Angular 7 应用运行 Karma 测试时 命令行版本 7 3 9 I have 一份 Karma 测试规范在
  • Scapy:处理部分 TLS 段

    我正在尝试使用 Scapy 从 pcap 中提取 TLS 元数据 我能够成功解析数据包和单个消息 例如 client hello server hello 等及其字段 我遇到的问题是当 TLS 记录分布在多个 TCP 数据包 段时 这种情况