我正在使用pyshark
并试图打印出JSON
。这是我的代码:
import pyshark
import json
capture = pyshark.LiveCapture(interface='eth0', bpf_filter='http', use_json=True)
for packet in capture.sniff_continuously(packet_count=10):
print(json.loads(str(packet)))
但我得到了一个错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
另外,当简单地运行print(packet)
时,它不是JSON
更新
我试过这个:
cmd = 'tshark -i en0 -f http -T json -x -l --no-duplicate-keys'
args = shlex.split(cmd)
tshark = subprocess.Popen(args, stdout=subprocess.PIPE)
for line in io.TextIOWrapper(tshark.stdout, encoding="utf-8"):
print("test: %s" % line.rstrip())
但是打印出JSON
对象的每一行而不是一个组合对象,我猜这是因为管道。
是否可以更改此设置,以便每个数据包都有实际的JSON
对象
无法解码为JSON的原因是数据包字符串不是JSON:
输出:
根据relevant PyShark file,参数use_json是实验性的:
使用带有
-T json
标志的tshark将使json更快(这也是use_json
的基础)而是直接使用Tshark
你应该直接考虑使用scapy或TSARK。在本例中,我们通过调用tshark with subprocess打印一个数据包的以太网层:
然后运行它:
相关问题 更多 >
编程相关推荐