无法理解 PcapNG 文件中的 802.11 数据帧格式

2024-02-24

I have PcapNG由 Wireshark 创建的文件,我尝试用它来解析python-pcapng.

However, I cannot figure out how to reconcile the output I receive from FileScanner's packet_payload_info with the 802.11 Data frame format: 802.11 Data frame format

这是我得到的输出(我的代码位于底部):

magic_number 0xa0d0d0a
SectionHeader(version_major=1, version_minor=0, section_length=-1, options=Options({'shb_userappl': [u'Dumpcap 1.12.4 (v1.12.4-0-gb4861da from master-1.12)'], 'shb_os': [u'Mac OS X 10.10.2, build 14C109 (Darwin 14.1.0)']}))

magic_number 0x1
InterfaceDescription(link_type=127, reserved='\x00\x00', snaplen=262144, options=Options({'if_os': [u'Mac OS X 10.10.2, build 14C109 (Darwin 14.1.0)'], 'if_tsresol': [6], 'if_name': [u'en1']}))

magic_number 0x6
EnhancedPacket(interface_id=0, timestamp_high=332139, timestamp_low=2801116064L, packet_payload_info=(45, 45, '\x00\x00\x19\x00o\x08\x00\x00`I\xb2&\x00\x00\x00\x00\x12\x18q\x16@\x01\xb1\xaa\x00\xb4\x00\x90\x00\xf4\x0f\x1b\xb8sL`\x92\x175\x00\x01\xe3\xcf\x00\x12'), options=Options({}))

packet_payload_info      : (45, 45, '\x00\x00\x19\x00o\x08\x00\x00`I\xb2&\x00\x00\x00\x00\x12\x18q\x16@\x01\xb1\xaa\x00\xb4\x00\x90\x00\xf4\x0f\x1b\xb8sL`\x92\x175\x00\x01\xe3\xcf\x00\x12') 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 60 49 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (bin): 00000000 00000000 00011001 00000000 01101111 00001000 00000000 00000000 01100000 01001001 10110010 00100110 00000000 00000000 00000000 00000000 00010010 00011000 01110001 00010110 01000000 00000001 10110001 10101010 00000000 10110100 00000000 10010000 00000000 11110100 00001111 00011011 10111000 01110011 01001100 01100000 10010010 00010111 00110101 00000000 00000001 11100011 11001111 00000000 00010010

你能告诉我在哪里吗packet_payload_data适合 802.11 数据框吗?*

  • 即,它的第一个字节适合帧中的什么位置

Python代码:

#!/usr/bin/env python

from pcapng import FileScanner

def hex_str_to_num(hex_str,out_format='X'):
    if out_format.upper() == 'B':
        return ' '.join(format(ord(x), out_format).zfill(8) for x in hex_str)
    else:
        return ' '.join(format(ord(x), out_format).zfill(2) for x in hex_str)


PCAPNG = "/cygdrive/c/tmp/trace3.pcapng"
MAX = 3
ENHANCEDPACKET_ID = 6

with open(PCAPNG, "r") as pcapng_file:
    scanner = FileScanner(pcapng_file)
    counter = MAX
    for block in scanner:
        print
        print "magic_number",hex(block.magic_number)
        print block

        if block.magic_number == ENHANCEDPACKET_ID:
            print
            payload_data = block.packet_payload_info[2]
            print "packet_payload_info      :",block.packet_payload_info,"\n"
            print "packet_payload_data (hex):",hex_str_to_num(payload_data,"X"),"\n"
            print "packet_payload_data (bin):",hex_str_to_num(payload_data,"b")

        counter -= 1
        if not counter:
            break

EDIT 1:

如果我打印几张EnhancedPacket's packet_payload_data,我注意到它们都以00 00 19 00 6F 08 00 00。现在08是数据框标记,这让我怀疑packet_payload_data不仅仅是有效负载数据,还包括帧控制 bits.

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 60 49 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 92 49 B2 26 00 00 00 00 12 18 71 16 40 01 CD AA 00 C4 00 60 00 60 92 17 35 00 01 F7 65 6E 79 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 09 4A B2 26 00 00 00 00 12 18 71 16 40 01 CA AA 00 94 00 00 00 60 92 17 35 00 01 F4 0F 1B B8 73 4C 04 00 C0 23 FF FF FF FF FF FF FF FF 58 D0 59 5C 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 5F 51 B2 26 00 00 00 00 52 6C 71 16 40 01 B2 AA 00 B4 00 1C 1B F4 0F 1B B8 73 4C 60 92 17 35 00 01 33 20 02 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 86 51 B2 26 00 00 00 00 12 6C 71 16 40 01 CA AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 EE 53 B2 26 00 00 00 00 12 6C 71 16 40 01 B1 AA 00 B4 00 74 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 33 20 02 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 15 54 B2 26 00 00 00 00 12 6C 71 16 40 01 CB AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 98 56 B2 26 00 00 00 00 52 6C 71 16 40 01 B2 AA 00 AB 00 74 00 F4 0F 1B B8 73 3C E4 44 DF 67 09 14 3A 0A 24 04 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 C0 56 B2 26 00 00 00 00 12 6C 71 16 40 01 CB AA 00 C4 00 4C 00 60 92 17 35 00 01 EE 12 B7 D7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 E8 58 B2 26 00 00 00 00 12 18 71 16 40 01 B1 AA 00 B4 00 90 00 F4 0F 1B B8 73 4C 60 92 17 35 00 01 E3 CF 00 12 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 1B 59 B2 26 00 00 00 00 12 18 71 16 40 01 CD AA 00 C4 00 60 00 60 92 17 35 00 01 F7 65 6E 79 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 92 59 B2 26 00 00 00 00 12 18 71 16 40 01 CA AA 00 94 00 00 00 60 92 17 35 00 01 F4 0F 1B B8 73 4C 04 00 D0 23 FF FF FF FF FF FF FF FF B0 51 F7 7B 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 A0 69 B2 26 00 00 00 00 12 6C 71 16 40 01 C6 AA 00 B4 00 C0 00 50 2E 5C DA 81 9D F4 0F 1B B8 73 4C B4 E2 C5 B7 

packet_payload_data (hex): 00 00 19 00 6F 08 00 00 17 6A B2 26 00 00 00 00 12 6C 71 16 40 01 C5 AA 00 B4 00 C0 00 50 2E 5C DA 81 9D F4 0F 1B B8 73 4C B4 E2 C5 B7 

首先,做not假设,仅仅因为您在 802.11 接口上捕获,帧数据就以 802.11 标头开始。它可能以“无线电元数据”标头开头,例如,其后跟随 802.11 标头。

ALL读取 pcap-ng 文件的程序必须:

  • 读取所有接口描述块,并至少记住该 IDB 的序号(稍后将用作接口 ID)和接口的 LinkType 值;
  • 处理数据包块时,查找具有指定接口 ID 的接口的 LinkType 值,并使用它来解释原始数据包数据。

LinkType 值的官方列表 http://www.tcpdump.org/linktypes.html指示这些值是什么以及应如何解释该值的数据包数据。永远永远永远永远不要假设数据包数据会是什么样子;始终检查 LinkType 值。

(这也适用于 pcap 文件;始终检查文件的链路层标头类型。)

现在,请注意00 00 19 00 6F 08 00 00可能是一个开始radiotap http://www.radiotap.org头,版本值为 0,填充字节为 0,小端长度为 25 字节,第一个存在位字为 0x0000086F。该存在位字表示存在的字段将是TSFT http://www.radiotap.org/defined-fields/TSFT(8字节),Flags http://www.radiotap.org/defined-fields/Flags(1字节),Rate http://www.radiotap.org/defined-fields/Rate(1字节),Channel http://www.radiotap.org/defined-fields/Channel(4字节),天线信号 http://www.radiotap.org/defined-fields/Antenna%20signal(1字节),天线噪声 http://www.radiotap.org/defined-fields/Antenna%20noise(1 个字节),以及Antenna http://www.radiotap.org/defined-fields/Antenna(1 字节)。版本、填充字节、长度和存在位字为 8 个字节,总共 8+8+1+1+4+1+1+1 = 25 个字节。

所以我绝对会NOT假设您正在查看 802.11 标头!您必须检查 LinkType;如果是 127 (LINKTYPE_IEEE802_11_RADIOTAP),则数据包以 radiotap 标头开头,后跟 802.11 标头。如果是 105 (LINKTYPE_IEEE802_11),则它们以 802.11 标头开头。

802.11 标头,无论是跟随在 radiotap(或其他无线电元数据)标头之后还是位于原始数据包数据的开头,都是原始 802.11 标头,因此它以帧控制字段开头,后面是持续时间,依此类推。

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

无法理解 PcapNG 文件中的 802.11 数据帧格式 的相关文章

  • 在 python 2 和 3 的spyder之间切换

    根据我在文档中了解到的内容 它指出您只需使用命令提示符创建一个新变量即可轻松在 2 个 python 环境之间切换 如果我已经安装了 python 2 7 则 conda create n python34 python 3 4 anaco
  • 根据 pandas 中的条件交换列值

    我想按条件重新定位列 如果国家 地区是 日本 我需要将姓氏和名字反向重新定位 df pd DataFrame France Kylian Mbappe Japan Hiroyuki Tajima Japan Shiji Kagawa Eng
  • 如何在groupby之后将pandas数据框拆分为许多列

    我希望能够在 pandas 中使用 groupby 按列对数据进行分组 然后将其拆分 以便每个组都是数据框中自己的列 e g time data 0 1 2 0 1 2 3 0 2 3 4 0 3 1 2 1 4 2 3 1 5 3 4 1
  • 如何在 iOS 中通过 3G 连接创建无线热点

    如果我愿意 我将如何创建一个像这样的应用程序MyWi http intelliborn com mywi html 即 WiFi 网络共享应用程序 实现该功能需要哪些步骤 我需要使用哪些框架 库 我们的目标不是尝试将此应用程序放入应用程序商
  • 无法将 datetime.datetime 与 datetime.date 进行比较

    我有以下代码并收到上述错误 由于我是 python 新手 我无法理解这里的语法以及如何修复错误 if not start or date lt start start date 有一个datetime date 从日期时间转换为日期的方法
  • 无法安装时间模块

    我试过了pip install time and sudo H pip install time 但我不断收到错误 找不到满足要求时间的版本 从 版本 未找到时间匹配的发行版 我正在 PyCharm 中工作 但真正没有意义的是我可以在 Py
  • 如何用xlrd读取公式

    我正在尝试做一个解析器 它读取几个 Excel 文件 我通常需要位于行底部的值 您可以在其中找到所有上部元素的总和 因此 单元格值实际上是 sum 或 A5 0 5 可以说 对于使用 Excel 打开此文件的用户来说 它看起来像一个数字 这
  • 远程控制或脚本打开 Office 从 Python 编辑 Word 文档

    我想 最好在 Windows 上 在特定文档上启动 Open Office 搜索固定字符串并将其替换为我的程序选择的另一个字符串 我该如何从外部 Python 程序中做到这一点 OLE 什么 原生 Python 脚本解决方案 The doc
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • Pandas,按最大返回值进行分组 AssertionError:

    熊猫有问题 我想听听你的意见 我有这个数据框 我需要在其中获取最大值 代码就在下面 df stack pd DataFrame 1 0 2016 0 NonResidential Hotel 98101 0 DOWNTOWN 47 6122
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • 本地设置的 Cython 编译器指令是否影响一个或所有函数?

    我正在努力使用 Cython 加速一些 Python Numpy 代码 并且对 本地 设置 如定义的here http docs cython org en latest src reference compilation html在文档中
  • Python列表对象属性“append”是只读的

    正如标题所说 在Python中 我试图做到这一点 以便当有人输入一个选择 在本例中为Choice13 时 它会从密码列表中删除旧密码并添加新密码 passwords mrjoebblock mrjoefblock mrjoegblock m
  • 使用Python重命名目录中的多个文件

    我正在尝试使用以下 Python 脚本重命名目录中的多个文件 import os path Users myName Desktop directory files os listdir path i 1 for file in files
  • 获取运行云功能的运行时服务帐户

    有没有办法以编程方式从云功能获取运行时服务帐户的电子邮件 我知道我可以 猜测 默认的 App Engine 帐户 因为它始终是 appspot gserviceaccount com 但这不是我想要的 我本来期待有一些环境变量 https
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq

随机推荐

  • GET_TASKS 权限已弃用

    我有一个使用此权限的安全应用程序 App Locker android permission GET TASKS 在 android Lollipop 中 此权限已被弃用 我希望我的应用程序可以在 21 API 中运行 谁能指导我怎么做 T
  • JPADatabase 的 jooq codegen 无法正常工作

    我在 JPADatabase 中使用 jooq codegen 时遇到问题 我经历过这个post https stackoverflow com questions 42968155 unable to generate jooq clas
  • 如何使用 javascript/jquery 获取具有特定文本的元素的类名称?

    我需要一种 JavaScript 或 jQuery 方法来通过 DIV 元素包含的文本提取 DIV 元素的类名 让我们举例说明 如果我有的话 我们可以说以下代码 div class className UniqueText div 我需要知
  • 用于设置主页功能的通用 JavaScript [重复]

    这个问题在这里已经有答案了 是否有任何适用于几乎所有浏览器的 javascript 将网页设置为主页 我正在使用下面的一种 但它只适用于 i e 和 mozilla var flag false function setHomepage w
  • Scalac 挂在 RegexParser 的阶段类型上

    我有一个 scala 程序 其中有一个解析器组合器 这是通过扩展来完成的scala util parsing combinator RegexParsers 我使用 Scala 2 10 开发它 一切正常 昨天我将系统升级到了 Scala
  • 播放前检测浏览器/设备是否可以内嵌播放 HTML5 视频

    我知道我可以检查一下navigator userAgent如果设备是 iPhone 但还有其他设备 其中一些我不知道哪些设备会在其自己的播放器中播放视频 可以列出所有不内联播放视频的浏览器 设备 但我想知道是否还有其他解决方案 JavaSc
  • 创建 iOS 应用程序 (Xcode) 时,如何关闭自动图标“凝胶”

    有没有办法去掉创建 iPhone 应用程序时自动添加到图标的突出显示 或者我必须在 PS 中手动补偿 Thanks Set UIPrerenderedIcon to YES在你的 Info plist 中 欲了解更多信息 请参阅 信息属性列
  • 将 pandas 数据框中的 datetime64 列拆分为日期和时间列

    如果我有一个数据框 第一列是 datetime64 列 如何将此列拆分为 2 个新列 日期列和时间列 这是到目前为止我的数据和代码 DateTime Actual Consensus Previous 20140110 13 30 00 7
  • R 如何将“-17+3”等简单函数分离为数字,例如“-17”和“3”

    我的数据就像 17 3 2 6 我需要做的是将每个数字分成两个数字 例如 17 3 变为 17 和 3 2 6 分为 2 和 6 通过使用 R 非常感谢 gregexpr http stat ethz ch R manual R devel
  • Fortran:哪种方法可以更快地更改数组的等级? (重塑与指针)

    当我们处理大型数组时 考虑数组的等级和形状变化的成本可能很重要 特别是当它在多个子例程 函数中发生几次时 我问题的主要目的是将数组的排名从第二更改为第一 反之亦然 为此 可以使用 重塑声明 指针变量 下面的代码展示了如何使用指针变量 pro
  • C++中双冒号的全名

    如果我有课 class A public A void print private int value A A value 0 void A print cout lt lt value lt lt endl 最后两行中 符号的完整名称是什
  • 如何使用messagebox输出调试信息

    我正在使用 MessageBox 尝试进行一些手动调试 这就是我所想出的全部 我应该如何使其工作 private void DisplayMessageBoxText MessageBox Show Alert Message 您可以使用写
  • 关于使用遗留代码的建议

    我需要一些关于如何使用遗留代码的建议 不久前 我接到的任务是向报告应用程序添加一些报告 2005 年用 Struts 1 编写的 没什么大不了的 但是代码相当混乱 没有使用Action形式 基本上代码就是一个巨大的action 里面有很多i
  • Dockerfile 中的 Mongorestore

    我想创建一个启动 mongo 服务器并自动从以前的版本恢复的 Docker 映像mongodump启动时 这是我的图像 Dockerfile FROM mongo COPY dump home dump CMD mongorestore h
  • 无法删除 Qt 布局的子布局中的小部件

    我正在使用 Windows 版 Qt 5 5 0 在用于登录和注册的对话框中 我使用 QVBoxLayout 作为对话框的主布局 并将 QGridLayout 添加到 mainLayout 当我单击 注册 按钮时 它将添加太多用于注册的 L
  • 使用 ghc 编译 Haskell 代码时出现专业化警告

    尝试编译时出现以下错误 ghc make O2 Wall fforce recomp 1 of 1 编译主程序 isPrimeSmart hs isPrimeSmart o 规格构造 函数 wa v s2we lid 有两种调用模式 但限制
  • Ngrok:如何打开80端口

    我刚刚在本地计算机上安装了 ngrok 运行 ngrok http 80 照常 但是当我尝试访问80端口时 localhost 80 我收到此错误消息 与 http ngrok io 的连接已成功通过隧道连接到 您的 ngrok 客户端 但
  • 管道成功完成后 Bitbucket Webhook 触发

    我想在管道成功完成后触发 Webhook 我查看了触发器列表 但没有找到任何内容 是否有解决方法可以通过 Pipeliens 手动触发 Webhook 您可以使用构建状态已更新 https confluence atlassian com
  • 核心数据:观察某种类型实体的所有变化

    每当添加 更改 删除某种类型的实体时 我希望收到通知 我知道通过向managedObjectContext 但随后我必须搜索返回的三个集合以查看它们是否包含该类型的对象 我可以用filteredSetUsingPredicate 但是每次有
  • 无法理解 PcapNG 文件中的 802.11 数据帧格式

    I have PcapNG由 Wireshark 创建的文件 我尝试用它来解析python pcapng However I cannot figure out how to reconcile the output I receive f