python - 使用 Pyshark 对 JSON 数据包中的键和值进行配对
问题描述
我正在尝试使用 Pyshark 解析 PCAP 文件。一些数据包中包含 JSON,我正在尝试使用匹配的键:值将它们打印出来。
这是我目前的测试:
import pyshark
packets = pyshark.FileCapture('cap.pcapng')
pack = packets[1] #get the packet that has JSON
print(pack.json.get_field_value('app')
这样做时,我会被None
打印出来。
如果我打印整个 JSON 层,我会得到如下数据:
Object
Member Key: anonymousId
String value: f268204c-5719-43ce-9a5e-094d8f3df6b8
Key: anonymousId
True value
Object
Object
Object
Object
Object
Object
Member Key: context
Member Key: app
Member Key: app_name
Member Key: app_platform
Member Key: app_version
Member Key: device
Member Key: adTrackingEnabled
Member Key: advertisingId
Member Key: id
Member Key: manufacturer
Member Key: model
Member Key: resolution
Member Key: type
Member Key: version
Member Key: ip
Member Key: library
Member Key: name
Member Key: version
Member Key: locale
Member Key: os
Member Key: name
Member Key: version
Member Key: primary_business_unit
Member Key: secondary_business_unit
Member Key: traits
Member Key: entitlements
Member Key: mvpd
Member Key: userAgent
Member Key: event
Member Key: properties
Member Key: type
Member Key: userId
String value: Fox Now
String value: foxnow
String value: roku
String value: 3.18.0
String value: 622ac229-c26e-5318-89bd-b281da9bed32
String value: 1de01830-d4bb-5d12-9d86-f81da8d12698
String value: Roku
String value: 3600X
String value: 1080p
String value: roku
String value: 249.10E04111A
String value: 71.120.154.30
String value: SegmentAnalyticsService.brs
String value: 3.18.0 (11624)
String value: en-US
String value: Roku
String value: 9.10 build 4111
String value: fng
String value: fox
String value: btn-btn2go,fbc-fox,FoxBusiness,foxdep,FoxNews,fs1,fs2,fx,fxm,fxx,ngc,ngw
String value: verizon
String value: Roku/DVP-9.10 (249.10E04111A)
String value: Live TV Section Viewed
String value: track
String value: MTM0OTA5MDktNWE1MC00YTg4LWJhNWItYzdmMDA1N2UyYjQz
Key: app
Key: app_name
Key: app_platform
Key: app_version
Key: adTrackingEnabled
Key: advertisingId
Key: id
Key: manufacturer
Key: model
Key: resolution
Key: type
Key: version
Key: device
Key: ip
Key: name
Key: version
Key: library
Key: locale
Key: name
Key: version
Key: os
Key: primary_business_unit
Key: secondary_business_unit
Key: entitlements
Key: mvpd
Key: traits
Key: userAgent
Key: context
Key: event
Key: properties
Key: type
Key: userId
这就是 JSON 的样子..
我希望能够遍历 JSON 中的每个值并打印它所包含的值和键。
所以我想基本上打印 JSON 输出与它匹配的样子。
我试过谷歌搜索,但找不到任何对我有用的例子。
解决方案
尝试通过 Filecapture 方法打开 PCAP 文件时,设置“use_json=True”。这将以类似 JSON 的格式捕获数据包。
import pyshark
packets = pyshark.FileCapture('cap.pcapng',use_json=True,include_raw=True)
pack = packets[1] #get the packet that has JSON
jsonStr=str(pack.json)
print(jsonStr)
这将以以下方式打印数据包的 JSON 层:
Layer JSON:
object_raw: 7ba298
object_raw: 234
object_raw: 97
object:
member_raw: 345ad
member_raw: 4567
member:
key: manufacturer
string: Live TV Section Viewed
value.string: abcd
value.string_raw: ab345
key_raw: 8abc6
string_raw: 67ac
member:
key: ip
string: 71.120.154.30
value.string: 234
value.string_raw: ab345
key_raw: 8abc6
string_raw: 67ac
因此,此字符串 (jsonStr) 中的每个“成员”段都包含一个“键”字段和一个“字符串”字段,它们对应于您在原始 JSON 中的键值对以及其他原始数据。您可以在使用 FileCapture 方法捕获数据包时使用 'include_raw=False' 省略原始数据。通过使用键(例如“制造商”)和值的数据类型(字符串或数字),您可以提取所需的任何键的值。
推荐阅读
- javascript - 在反应中将下拉框重置为原始值
- amazon-cloudformation - 使用 CDK 将启动配置分配给 Auto-Scaling 组
- javascript - JavaScript 中的子字符串截断了超出应有的内容
- java - 如何在用户不在应用程序(android studio)中时运行firebase实时数据库“onChildEventListener”?
- reactjs - 类型“数字”不可分配给类型 void | 析构函数
- c# - C#:调用泛型方法名,该方法名又会根据变量的内容调用其他方法
- c++ - 在 QTableView 中显示来自 QAbstractListModel 的修改数据
- oracle - Oracle Apex 经典报表 PL/SQL 函数体返回 SQL 查询
- c++ - 如何修复我的 C++ 代码?(不匹配运算符)
- php - 如何从已完成的订单中删除一个项目 (wc_delete_order_item ())