如何使用 tshark 将 pcap 转换为十六进制流?

How to convert a pcap into hex stream using tshark?

我在Python中尝试的就是这个:

首先,我读取了 pcap 文件并在 Python 中使用了这个命令:

with open("pcap_files/DCERPC.pcap", 'rb') as f:
    content = f.read()
binascii.hexlify(content)

自从它读取了整个文件后,我没有得到准确的十六进制流。

因此,是否可以使用 tshark 将 pcap 复制到十六进制流中?

编辑:

在图像wireshark capture中,有很多帧,其中我select一个并复制它有十六进制流。在 tshark 或 xxd 中执行此操作的命令是什么?

在您使用 python 时,您可能需要查看 PyShark,它利用了 tshark。

设置:创建文件

让我们创建一个单数据包文件用于演示目的:

bash-5.0$ tshark -w temp.pcap -c 10
Capturing on 'Wi-Fi: en0'
1 
1 packet dropped from Wi-Fi: en0

解析十六进制

十六进制的解析方式有很多种。您选择哪种方法取决于您要执行的操作。 Tshark 将向您显示数据包,而 hexdump 和 xxd 将向您显示每个字节,包括捕获格式字节。要了解数据包和文件格式字节之间的区别,这篇关于解构 pcap format 的文章可能会有所帮助。 Wireshark 还可以使用 View -> "Reload as File Format/Capture".

执行此操作

用 tshark 获取十六进制

要从 tshark 获取每个数据包的十六进制,请使用 -T json 然后找到 "frame_raw" 字段。

bash-5.0$ tshark -x -r temp.pcap -T json
[
  {
    "_index": "packets-2019-09-10",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "frame_raw": ["cc65adda39706c96cfd87fe7080045000028910000004006ca3fc0a801f69765c58cc08001bb2f5a0b8169ef01ab501008001f930000",
          0,
          54,
          0,
          1
        ],
        "frame": {
          "frame.encap_type": "1",
          "frame.time": "Sep 10, 2019 18:57:29.571371000 PDT",
          "frame.offset_shift": "0.000000000",
...

在 python

中使用 tshark 获取十六进制
import json
import subprocess as sp

def get_tshark_hexstreams(capture_path: str) -> list:
    """Get the frames in a capture as a list of hex strings."""
    cmds = ["tshark", "-x", "-r", capture_path, "-T", "json"]
    frames_text = sp.check_output(cmds, text=True)
    frames_json = json.loads(frames_text)
    hexstreams = [frame["_source"]["layers"]["frame_raw"][0] for frame in frames_json]
    return hexstreams

output = get_tshark_hexstreams('temp.pcap')
print(output)
['6c96cfd87fe7cc65adda'...
 'cc65adda39706c96cfd8'...
 'ffffffffffff60a44c24'...
 ...

根据相关更新进行编辑。