[英]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 種不同的方式使用它:
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.