簡體   English   中英

Python Scapy - 在 UDP 數據中創建一個新的協議定義

[英]Python Scapy - create a new protocol definition within UDP Data

是否可以使用 Scapy 的 PcapReader 來分析帶有自定義字段的 UDP 數據包數據? 例如,在UDP數據包(見附件Wireshark抓包)中,my_proto有如下字段:

VER - 2 bytes
FLAGS - 2 bytes
TIMESTAMP - 8 bytes
VAL1 - 4 bytes
VAL2 - 4 bytes, etc

我想解析這些字段,以便對於接收到的每個數據包,我都可以檢索 [my_proto].VER、[my_proto].FLAGS 等。

我認為我想要的類似於文檔中的 Disney 示例,但是,我不確定如何將它綁定(不確定這是否是正確的詞)到 UDP 的數據部分。( https://scapy.readthedocs .io/en/latest/build_dissect.html )

在此處輸入圖像描述

正如您所說,您的協議可能類似於:

from scapy.all import Packet,LEShortField, LELongField, LEIntField

class GreatProtocol(Packet):
    name = "GreatProtocol "
    fields_desc=[ LEShortField("VER", 0),
                  LEShortField("FLAGS",0),
                  LELongField("TIMESTAMP", 0),
                  LEIntField("VAL1", 0),
                 ]

現在,要綁定您需要使用 function 綁定。 您可以通過 3 種不同的方式使用它:

  • 所有 UDP payload 都是 GreatProtocol(不推薦)
  • 所有目標端口為 X 的 UDP 都是 GreatProtocol(最符合邏輯)
  • src port = X 的所有 UDP 都是 GreatProtocol
from scapy.all import bind_layers
from scapy.layers.inet import UDP


# All UDP payload are GreatProtocol (not recomended)
bind_layers(UDP, GreatProtocol)

# All UDP with dest port = X are GreatProtocol (most logical)
bind_layers(UDP, GreatProtocol, dport=55)


# All UDP with src port = X are GreatProtocol
bind_layers(UDP, GreatProtocol, sport=99)

請注意,我顯示使用 src 和 dst 端口,但您可以使用層 UDP 的任何字段

也可以選擇一次性使用。



my_packet[UDP].decode_payload_as(GreatProtocol)

文檔:

創建層: https://scapy.readthedocs.io/en/latest/build_dissect.html

綁定層: https://scapy.readthedocs.io/en/latest/build_dissect.html#binding-layers

decode_payload_as: https://scapy.readthedocs.io/en/latest/api/scapy.packet.html#scapy.packet.Packet.decode_payload_as

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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