wifi - 在 tshark、tcpdump 或类似文件中导出原始数据包字节?

标签 wifi extract wireshark pcap tshark

上下文:

我有一个包含许多 WLAN 探测请求的 *.pcap 文件。我的目标是将每个探测请求的 WLAN 管理帧提取为原始字节(即,没有 header 和额外信息——只有原始字节,就像它们最初被捕获的那样)。

在 Wireshark 中,我只需右键单击管理框架并选择“Export Packet Bytes...”:
Wireshark Raw Packet Byte Extraction

如果我选择“RAW”作为文件格式,Wireshark 会给出我想要的:一个只包含所选字节的文件。

问题:

我需要以编程方式自动执行此任务。我遇到了 tshark 之类的工具, tcpdump , capedit等。但是,这些工具似乎都不允许我提取 WLAN 管理框架,仅此而已。

虽然我能够使用 tcpdump 在标准输出上获得所需的 ASCII 字节,我无法将它们保存到文件或变量中。此外,我只能针对单个探测请求执行此操作,而不是针对 *.pcap 文件中的所有探测请求。

当前方法:

如上所述,我能够在标准输出上以 ASCII 格式获得所需的字节:

$ tcpdump -r capture.pcap -c 1 -x
reading from file capture.pcap, link-type IEEE802_11_RADIO (802.11 plus radiotap header)
11:24:52.933799 1.0 Mb/s 2457 MHz 11b -77dBm signal antenna 1 Probe Request () [1.0* 2.0* 5.5* 6.0 9.0 11.0* 12.0 18.0 Mbit]
    0x0000:  0000 0108 8284 8b0c 1296 1824 3204 3048
    0x0010:  606c 2d1a ac01 02ff ff00 0000 0000 0000
    0x0020:  0000 0000 0000 0000 0000 0000 0000

要提取原始字节,我可以简单地将这个输出通过管道传输到 grep , sed , 和 xxd :
$ tcpdump -r capture.pcap -c 1 -x | grep "0x00" | sed  's/0x[[:xdigit:]]*:[[:space:]]*//g' | xxd -r -p > rawbytefile

显然,这是完成我想要的事情的一种相当老套的方式,必须有更好的方式。没有人想要高度依赖于其他人程序的以人为中心的输出的代码。

问题:
  • 如何以正确的方式提取 WLAN 管理帧? (在命令行/以编程方式 - 使用 Bash、Python 等)
  • 如何对 *.pcap 文件中的每个探测请求执行此操作? (同样,以正确的方式 - 通过解析 ASCII 输出构建另一个 hacky 循环并不是真正应该做的......)
  • 最佳答案

    我想你已经找到了一个解决方案,但我想我会发布一个可能的替代解决方案,它可能会也可能不会满足你的需求,并且只使用 tshark .如果禁用“wlan_mgt”协议(protocol),“wlan”有效负载将被传递到通用“数据”解析器,可以打印。例如:

    tshark -r capture.pcap --disable-protocol wlan_mgt -Y "wlan.fc.type_subtype == 0x0004" -T fields -e data
    

    ...或者如果您愿意,可以在字节之间使用冒号分隔符:
    tshark -r capture.pcap --disable-protocol wlan_mgt -Y "wlan.fc.type_subtype == 0x0004" -T fields -e data.data
    
    tshark 的旧版本不允许您在命令行上禁用特定协议(protocol),因此在这种情况下,您必须先禁用 Wireshark 中的“wlan_mgt”解析器,或者创建一个单独的 Wireshark 配置文件,在其中禁用它,然后告诉 tshark通过 -C <configuration profile> 使用该配置文件选项。

    我正在运行旧版本的 Wireshark (1.12.13),在我的测试中似乎存在一个错误,因为只打印了一部分探测请求数据包。不过,也许该错误已在较新版本的 Wireshark 中修复,但如果没有,Wireshark bug report可以提交请求修复此问题。

    关于wifi - 在 tshark、tcpdump 或类似文件中导出原始数据包字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230580/

    相关文章:

    ipad - 是否已验证 iPad 无法创建 ad hoc wifi 网络?

    python - 在 Python 中检测是否使用系留电话连接到互联网

    android - 使用 Android 从摄像机捕获 WiFi 信号

    Android:从网站而不是通过其源代码提取信息

    sockets - 第 2 层中的丢包通知

    linux - 使用保存在另一个文件中的标识符列表从主文件中提取信息(子集)

    http - 嗅探来自应用程序的 GET 和 POST 请求的 HTTP 数据包

    TCP校验和计算器

    android - 捕获 android 应用程序 http 流量

    r - 从R中的数字中提取第一个非零数字