Идеи о том, как преобразовать сообщение JSON в ASN.1 - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь преобразовать сообщение JSON в ASN.1.Моя цель - преобразовать JSON (захваченный из wire-shark) в ASN.1, а затем преобразовать asn1 в 802.11p.Любые идеи или ресурсы, которые я должен изучить?Я использую Python 3.7.

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Вы можете конвертировать JSON в ASN.1 с помощью этого инструмента https://asn1.io/json2asn/. Имейте в виду, что преобразование сообщения (JSON) в схему (ASN.1) всегда является приблизительным (например, невозможно определить, если "signal":3 соответствует типу INTEGER или типу ENUMERATION), поэтому вам придется просмотреть и уточнить сгенерированную схему или попытаться преобразовать более одного сообщения. Если у вас есть схема ASN.1, для вашего конкретного языка появятся различные инструменты ASN.1.

С другой стороны, если вы работаете с хорошо известным протоколом и не хотите его настраивать (или данные), вы можете найти оригинальную схему ASN.1 у издателя протокола.

0 голосов
/ 17 апреля 2019

Я бы предложил два возможных решения:

  1. Скомпилируйте схему ASN.1 с asn1c , она не поддерживает JSON, но поддерживает формат XER / XML,таким образом, вам нужно будет преобразовать JSON в формат XML / XER, ожидаемый asn1c, а затем преобразовать сообщение XER в двоичный файл, используя пример converter, который генерируется asn1c.Wireshark также может экспортировать в формате XML, но этот XML будет иметь структуру, отличную от той, которая поддерживается asn1c (XER), поэтому вам потребуется преобразовать его.

  2. Вы можете экспортировать данные вjsonraw, а затем извлеките поле *_raw интересующего вас протокола. Таким образом, вам не нужно конвертировать JSON в ASN.1 в binary, поскольку вы получаете binary непосредственно из JSON как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"
        }
      }
    }
  }
0 голосов
/ 16 апреля 2019

Может быть, вы можете попытать счастья с pyasn1 "родным" кодеком ...

Рабочий процесс может быть следующим:

  1. Превратите JSON в типы Python, затем
  2. Передайте их "родному" декодеру pyasn1, который будет создавать структуры данных [py] ASN.1 (но не текст ASN.1)
  3. Затем вы могли бы передать эти структуры данных в кодировщик BER pyasn1, чтобы превратить их в BER (если это то, что вам в конечном счете нужно)
...