上下文:
我有一个包含许多 WLAN 探测请求的 *.pcap 文件。我的目标是将每个探测请求的 WLAN 管理帧提取为原始字节(即,没有 header 和额外信息——只有原始字节,就像它们最初被捕获的那样)。
在 Wireshark 中,我只需右键单击管理框架并选择“Export Packet Bytes...”:
如果我选择“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
显然,这是完成我想要的事情的一种相当老套的方式,必须有更好的方式。没有人想要高度依赖于其他人程序的以人为中心的输出的代码。
问题:
最佳答案
我想你已经找到了一个解决方案,但我想我会发布一个可能的替代解决方案,它可能会也可能不会满足你的需求,并且只使用 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/