通用工业协议,Python脚本失败

问题描述

上下文-我一直在使用scapy作为通用格式的通用工业协议的python自动化脚本,以这种格式创建数据包。

在python 3.4环境中运行脚本没有任何问题,但是当尝试迁移到新环境时,基本上在使用python 3.6稍稍升级的环境中运行相同的脚本,我会看到以下错误

File "/users/alpeck/pyats3.6/lib/python3.6/site-packages/plc.py",line 65,in @R_404_3979@
     self.sock.send( bytes(sessionpkt,'utf-8'))

错误指出了一些脚本,但是我缩小了范围以进一步阐明该问题。

class PLcclient(object):
    """Handle all the state of an Ethernet/IP session with a PLC"""

    def @R_404_3979@(self,plc_addr,plc_port=44818):
        if not NO_NETWORK:
            try:
                self.sock = socket.create_connection((plc_addr,plc_port))
                print('Printing self sock')             --> Printing self sock
                print(self.sock)                    --> <socket.socket fd=17,family=AddressFamily.AF_INET,type=SocketKind.soCK_STREAM,proto=6,laddr=('64.101.134.34',15065),raddr=('10.89.157.229',44818)>
            except socket.error as exc:
                logger.warn("socket error: %s",exc)
                logger.warn("Continuing without sending anything")
                self.sock = None
        else:
            self.sock = None
        self.session_id = 0
        self.enip_connid = 0
        self.sequence = 1



        # Open an Ethernet/IP session
        sessionpkt = ENIP_TCP() / ENIP_RegisterSession()
        print('Printing session packet')        --> Printing session packet
        print(sessionpkt)               --> b'e\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'
        if self.sock is not None:
            self.sock.send( bytes(sessionpkt,'utf-8'))
            reply_pkt = self.recv_enippkt()
            self.session_id = reply_pkt.session



-此追溯指向下面的plc.py块-

class ENIP_RegisterSession(scapy_all.Packet):
    name = "ENIP_RegisterSession"
    fields_desc = [
        scapy_all.LEShortField("protocol_version",1),scapy_all.LEShortField("options",0),]



class ENIP_TCP(scapy_all.Packet):
    """Ethernet/IP packet over TCP"""
    name = "ENIP_TCP"
    fields_desc = [
        scapy_all.LEShortEnumField("command_id",None,{
            0x0004: "ListServices",0x0063: "ListIdentity",0x0064: "ListInterfaces",0x0065: "RegisterSession",0x0066: "UnregisterSession",0x006f: "SendRRData",# Send Request/Reply data
            0x0070: "SendUnitData",}),scapy_all.LEShortField("length",None),scapy_all.LEIntField("session",scapy_all.LEIntEnumField("status",{0: "success"}),scapy_all.LELongField("sender_context",scapy_all.LEIntField("options",]


问题在上方突出显示显示的会话数据包中没有数据或数据损坏。

sessionpkt = ENIP_TCP()/ ENIP_RegisterSession()

会话数据包在下面显示的另一个目录中创建。

{{1}}

如果还有其他方法可以解决错误,我可以提供更多信息。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)