问题描述
我是Scapy的新手。我正在尝试使用scapy.contrib.modbus解析pcap文件中的Modbus数据包。但是我很成功。我至少要根据库识别请求和响应数据包。 以下是pcap文件的链接:
https://github.com/tjcruz-dei/ICS_PCAPS/releases/download/MODBUSTCP%231/captures1.zip
下面是示例代码(不能使用):
from scapy.all import *
import scapy.contrib.modbus as mb
for pkt in PcapReader("captures1/clean/eth2dump-clean-0,5h_1.pcap"):
if pkt['TCP'].sport == 502:
pkt = mb.ModbusADUResponse(pkt)
print(type(pkt))
请协助。谢谢。
解决方法
该代码实际上比您想象的简单得多:
import scapy.all as scapy
import scapy.contrib.modbus as mb
for pkt in scapy.PcapReader("eth2dump-clean-0,5h_1.pcap"):
if mb.ModbusADUResponse in pkt:
pkt.show()
让我们详细了解为什么/如何工作。 scapy与协议之间的一些关系有助于解码。
在您的情况下:https://github.com/secdev/scapy/blob/master/scapy/contrib/modbus.py#L948 正在将TCP.port 502链接到ModbusADUResponse