使用Scapy

问题描述

我是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