簡體   English   中英

使用 Scapy 和 Python 從數據包中獲取 JSON 內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM