Попытка неявного обмена сообщениями EIP на устройстве EIP с использованием одной доступной библиотеки scapy-cip-enip - PullRequest
0 голосов
/ 17 января 2019

Исключение, которое я получаю:

[ОШИБКА] Не удалось переслать открытое соединение CIP:

Я знаю, что проблема, которую я получаю, - это то, что мне не хватает при отправке правильных параметров запроса на пересылку, включая параметры соединения и формат размера пути. Но не зная точного решения.

отправка запроса forward_open:

    def forward_open(self):
    """Send a forward open request"""
    cippkt = CIP(service=0x54, path=CIP_Path(wordsize=2, path=b'\x20\x06\x24\x01'))
    cippkt /= test_CIP_ReqForwardOpen(path_wordsize=3, path=b'\x01\x00\x20\x02\x24\x01')
    print("****", self.send_rr_cip(cippkt))
    resppkt = self.recv_enippkt()
    print("*** packet response", resppkt)
    if self.sock is None:
        return
    cippkt = resppkt[CIP]
    print("*** cippkt", cippkt)
    if cippkt.status[0].status != 0:
        logger.error("Failed to Forward Open CIP connection: %r", cippkt.status[0])
        return False
    assert isinstance(cippkt.payload, CIP_RespForwardOpen)
    self.enip_connid = cippkt.payload.OT_network_connection_id
    return True

Дополнительный справочный класс

class test_CIP_ConnectionParam(CIP_ConnectionParam):
name = "test_CIP_ConnectionParam"
fields_desc = [
    scapy_all.BitEnumField("owner", 0, 0, {0: "exclusive", 1: "multiple"}),
    scapy_all.BitEnumField("connection_type", 2, 1,
                           {0: "null", 1: "multicast", 2: "point-to-point", 3: "reserved"}),
    scapy_all.BitField("reserved", 0, 1),
    scapy_all.BitEnumField("priority", 2, 2, {0: "low", 1: "high", 2: "scheduled", 3: "urgent"}),
    scapy_all.BitEnumField("connection_size_type", 0, 0, {0: "fixed", 1: "variable"}),
    scapy_all.BitField("connection_size", 8, 4),
]

Дополнительный справочный класс

class test_CIP_ReqForwardOpen(CIP_ReqForwardOpen):
"""Forward Open request"""
name = "test_CIP_ReqForwardOpen"
priority = 0
tick_time = 10
timeout_ticks = 240
OT_network_connection_id = 0x06c2939d
TO_network_connection_id = 0x06c2939c
connection_serial_number = 0x939e
vendor_id = 0x00aa
originator_serial_number = 0x504d4153
connection_timeout_multiplier = 2
reserved = 0
OT_rpi = 0x000186A0
OT_connection_param = test_CIP_ConnectionParam(), test_CIP_ConnectionParam
TO_rpi = 0x000186A0
TO_connection_param = test_CIP_ConnectionParam(), test_CIP_ConnectionParam
transport_type = 0xa3
path_wordsize = None
CIP_PathField("path", None, length_from=lambda p: 2 * p.path_wordsize)

Scapy GitHub введите описание изображения здесь Захват проволочной акулы image1. введите описание изображения здесь Захват проволочной акулы image1

...