我正在尝试将JSON消息转换为ASN.1。我的目标是将JSON(从wire-shark捕获)转换为ASN.1,然后将asn1转换为802.11p。我应该研究哪些想法或资源?我使用的是Python 3.7。
您可以使用此工具https://asn1.io/json2asn/将JSON转换为ASN.1。请记住,将消息(JSON)转换为模式(ASN.1)始终是一种近似(例如,无法判断"signal":3
是否对应于INTEGER
类型或ENUMERATION
类型),因此您必须检查并优化生成的架构或尝试转换多个消息。拥有ASN.1架构后,您可以使用各种ASN.1工具来处理特定语言。
另一方面,如果您正在使用众所周知的协议并且您不想定制它(或数据),那么您可以从协议发布者中找到原始ASN.1模式。
也许你可以试试你的运气与pyasn1 "native" codec ...
工作流程可能是:
我建议两种可能的解决方案:
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"
}
}
}
}