json - 读取pcapng文件并获取json格式的标题

标签 json python-3.x wireshark packet-capture pcap-ng

我有一个wireshark数据包捕获(.pcapng),并且必须将该文件读取到Python程序的内存中。需要将数据包转换为 JSON 格式,如下所示:

$ tshark -r cap.pcapng -T json > ip.json

我需要将 json 数据写回 pcapng 文件。 请告诉我该怎么做。

最佳答案

-T json

如果您像问题中那样输出为 JSON,您将无法转换回 pcap。问题是独立的 JSON 没有字节偏移量或字节来告诉转换器要存储哪些字节以及在哪里。

如果这是您的 JSON,则可以使用数据手动编码新的 pcap,具体取决于 JSON 值的详细程度。如果您绝对绝望(即避免使用此方法),则需要进行这种费力的硬编码。

-T json 值如下所示:

[
  {
    "_index": "packets-2020-05-09",
    "_type": "doc",
    "_score": null,
    "_source": {
      "layers": {
        "frame": {
          "frame.interface_id": "0",
          "frame.interface_id_tree": {
            "frame.interface_name": "en0",
            "frame.interface_description": "Wi-Fi"
          },
          "frame.encap_type": "1",
          "frame.time": "May  9, 2020 20:03:11.303663000 PDT",
          "frame.offset_shift": "0.000000000",
          "frame.time_epoch": "1589079791.303663000",
          "frame.time_delta": "0.000000000",
          "frame.time_delta_displayed": "0.000000000",
          "frame.time_relative": "0.000000000",
          "frame.number": "1",
          "frame.len": "92",
          "frame.cap_len": "92",
          "frame.marked": "0",
          "frame.ignored": "0",
...

-T jsonraw/-T json -x

这些选项是等效的,并输出每个字段的字节和字节偏移量。 Wireshark 有一个专门用于此目的的内置 Python 实用程序,称为 json2pcap,但只会消耗这种类型的输出。

Martin Kacer 编写了此实用程序并具有 documentation for it在他的网站上。本文提供了从 pcap 转换为 json 再转换为 pcap 的分步指南。你可以找到源码并单独使用:json2pcap.py位于 Wireshark 的 github 存储库中。

-T jsonraw 输出如下所示:

[
  {
    "_index": "packets-2020-05-09",
    "_type": "doc",
    "_score": null,
    "_source": {
      "layers": {
        "frame_raw": [
          "cc65adda39706c96cfd87fe70800450000a40000400040061ec4c0a801f69765c18cd13b01bb72f797c64990e967801826c562c300000101080a52be1ece06253aa9170303006b00000000000043350c719c8d15f3339346992e557abac51ade350316082fa92225912552dde4ccec7197c6c7745b91b66747c1c8bea3337656213e59425f35c13fdf1739a174a7528d97b0eb10fce4daaba613840d8ce7f28bbbe094abd97db97da3f8f91b68e4db30d982",
          0,
          178,
          0,
          1
        ],
        "frame": {
          "frame.interface_id": "0",
          "frame.interface_id_tree": {
            "frame.interface_name": "en0",
            "frame.interface_description": "Wi-Fi"
          },
          "frame.encap_type": "1",
          "frame.time": "May  9, 2020 20:02:25.845268000 PDT",
          "frame.offset_shift": "0.000000000",
          "frame.time_epoch": "1589079745.845268000",
          "frame.time_delta": "0.000000000",
...

如您所见,frame_raw 具有数据包的完整字节,这对于重建非常重要。

关于json - 读取pcapng文件并获取json格式的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705980/

相关文章:

javascript - JSON stringify 有问题吗?

json - 如何解决flutter中的http error code 400 missing parameters?

python - 我无法在 selenium 中使用 python 请求 session cookie

https - 通过HTTPS嗅探POST变量

c++ - 使用 OpenSSL API 准备 secret 文件以解密 Wireshark 中的 TLS 1.3 流量

ios - 过滤其他 NSDictionary 中的 NSDictionary

json - 在 Angular 中从 json 获取键和值

python - GroupBY 频率计数 JSON 响应 - 嵌套字段

python-3.x - Tensorflow恢复模型: attempting to use uninitialized value

python - UDP包出现在wireshark中,但程序收不到