关于如何将JSON消息转换为ASN.1的想法

问题描述 投票:1回答:3

我正在尝试将JSON消息转换为ASN.1。我的目标是将JSON(从wire-shark捕获)转换为ASN.1,然后将asn1转换为802.11p。我应该研究哪些想法或资源?我使用的是Python 3.7。

json python-3.x network-programming asn.1
3个回答
1
投票

您可以使用此工具https://asn1.io/json2asn/将JSON转换为ASN.1。请记住,将消息(JSON)转换为模式(ASN.1)始终是一种近似(例如,无法判断"signal":3是否对应于INTEGER类型或ENUMERATION类型),因此您必须检查并优化生成的架构或尝试转换多个消息。拥有ASN.1架构后,您可以使用各种ASN.1工具来处理特定语言。

另一方面,如果您正在使用众所周知的协议并且您不想定制它(或数据),那么您可以从协议发布者中找到原始ASN.1模式。


0
投票

也许你可以试试你的运气与pyasn1 "native" codec ...

工作流程可能是:

  1. 然后将JSON转换为Python类型
  2. 将它们提供给“本机”pyasn1解码器,这将生成[py] ASN.1数据结构(不是ASN.1文本)
  3. 然后你可以将这些数据结构传递给pyasn1 BER编码器,将它们变成BER(如果这是你最终需要的)

0
投票

我建议两种可能的解决方案:

  1. 使用asn1c编译ASN.1模式,它不支持JSON但支持XER / XML格式,因此您需要将JSON转换为asn1c期望的XML / XER格式,然后使用以下内容将XER消息转换为二进制格式转换器 - 由asn1c生成的例子。 Wireshark也可以以XML格式导出,但是这个XML的结构与asn1c(XER)支持的结构不同,所以你需要转换它。
  2. 您可以以jsonraw格式导出数据,然后提取您感兴趣的协议的*_raw字段。这样您就不必将JSON转换为ASN.1到binary,因为您可以直接从JSON获取binary作为HEX字符串。
$ tshark -T jsonraw -j "incorrect" -r test_capture.pcap
[
  {
    "_index": "packets-2019-04-17",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "frame_raw": ["02112233445502778899aabb08004500003cc8c1400040060fcfac100501ac10050ac01a20fbcfc1fd2f00000000a00272108f2e0000020405b40402080a00a035ee0000000001030307", 0, 74, 0, 1],
        "frame": {
          "filtered": "frame"
        },
        "eth_raw": ["02112233445502778899aabb0800", 0, 14, 0, 1],
        "eth": {
          "filtered": "eth"
        },
        "ip_raw": ["4500003cc8c1400040060fcfac100501ac10050a", 14, 20, 0, 1],
        "ip": {
          "filtered": "ip"
        },
        "tcp_raw": ["c01a20fbcfc1fd2f00000000a00272108f2e0000020405b40402080a00a035ee0000000001030307", 34, 40, 0, 1],
        "tcp": {
          "filtered": "tcp"
        }
      }
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.