[英]Getting JSON content from a packet using Scapy with Python
我有一個包含少量流量的pcapng
文件。 我試圖打印的數據包之一包含 JSON 數據。 如果我在 Wireshark 中打開數據包,我可以看到 JSON 中的值。 但是當使用 scapy 讀取文件並打印時,我看不到它。
from scapy.all import IP, sniff
from scapy.layers import http
def process_tcp_packet(packet):
if packet.haslayer(http.HTTPRequest):
http_layer = packet.getlayer(http.HTTPRequest)
ip_layer = packet.getlayer(IP)
#print('\n{0[src]} just requested a {1[Method]} {1[Host]}{1[Path]}'.format(ip_layer.fields, http_layer.fields))
#print(ip_layer.fields)
#print(http_layer.fields)
#packet.show()
print('Packet: ' + str(packet))
print('\n\n')
# Start sniffing the network.
sniff(offline='test.pcapng', prn=process_tcp_packet, count=2)
這是 Wireshark 向我展示的 JSON 內容:
這是我使用上面的代碼為該數據包獲得的輸出..
Packet: b'\\x18\\x0fv\\xef0\\x8a\\xc4\\x98\\\\\\xe7=\\x18\\x08\\x00E\\x00\\x01&&S@\\x00@\\x06}\\n\\xc0\\xa8\\x89\\x94#\\xa7(\\x91\\x9b\\xd0\\x00P\\x16-/\\x9e\\xb1\\xa1\\xe8V\\x80\\x18\\x01K\\x97\\xaf\\x00\\x00\\x01\\x01\\x08\\n\\x00\\x00\\t\\xd5\\xfb\\xc3b\\x89POST /v1/identify HTTP/1.1\\r\\nHost: api.segment.io\\r\\nUser-Agent: Roku/DVP-9.10 (489.10E04121A)\\r\\nAccept: application/json\\r\\nAuthorization: Basic: NHJmY3AzUEJmTUhPVlJsWVZZNTZKRDZ0N1JuMUNoaVY=\\r\\nContent-Type: application/json\\r\\nContent-Length: 704\\r\\n\\r\\n'
我正在閱讀如何打印數據包的全部內容,這就是我遇到packet.show()
和print(packet)
但是它們仍然缺少 JSON 數據。
我想獲取 JSON 數據,因為我希望能夠手動解析它。 我不喜歡 Wireshark 如何將所有 JSON 嵌套到我必須下拉才能看到的箭頭中。
這是 show 的輸出:
我正在使用最新版本的 scapy。
這是一個老問題,但對於未來尋找答案的人來說,我是這樣做的:
packet_dict = {}
for line in packet.show2(dump=True).split('\n'):
if '###' in line:
layer = line.strip('#[] ')
packet_dict[layer] = {}
elif '=' in line:
key, val = line.split('=', 1)
packet_dict[layer][key.strip()] = val.strip()
print(json.dumps(packet_dict))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.