示例#1
0
class SCION(scapy.Packet):
    name = 'SCION'
    fields_desc = [
        # Common header
        scapy.BitField('version', 0, 4),
        scapy.BitEnumField('dst_type', "ipv4", 6, SCION_ADDR_TYPE),
        scapy.BitEnumField('src_type', "ipv4", 6, SCION_ADDR_TYPE),
        scapy.BitField('total_len', None, 16),
        scapy.BitField('hdr_len', None, 8),
        scapy.BitField('curr_inf', None, 8),
        scapy.BitField('curr_hf', None, 8),
        scapy.BitEnumField('next_hdr', None, 8, scapy.IP_PROTOS),
        scapy.PacketField('addr', None, SCIONAddr),
        scapy.PacketListField('path',
                              None,
                              PathSegment,
                              count_from=lambda _: 3),
        scapy.PacketField('ext', None, SecurityExtension)
    ]

    # this is terrible, but apparently that's how scapy works :-/
    def post_build(self, pkt, pay):
        # compute lengths
        if self.total_len == None:
            self.total_len = len(pkt) + len(pay)
            pkt = pkt[:2] + struct.pack('!H', self.total_len) + pkt[4:]
        if self.hdr_len == None:
            self.hdr_len = len(pkt) - self.ext.hdr_len
            if self.hdr_len % 8 != 0:
                raise ValueError(
                    "SCION packet header length not multiple of 8 bytes!")
            self.hdr_len = int(self.hdr_len / 8)  #must divide by 8
            pkt = pkt[:4] + struct.pack('B', self.hdr_len) + pkt[5:]

        return pkt + pay
示例#2
0
class SWAT_P1_RIO_DO(scapy_all.Packet):
    name = "SWAT_P1_RIO_DO"
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.ByteField('number', 0),
        scapy_all.StrFixedLenField('reserved', 0, length=5),
        scapy_all.BitField('spare', 0, 4),
        scapy_all.BitEnumField('valve_close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('valve_open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump2_start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump1_start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.FieldListField(
            "spare2", [],
            scapy_all.ByteField('', 0),
            length_from=lambda p: p.underlayer.length - 9),
    ]
示例#3
0
class CIP_ConnectionParam(scapy_all.Packet):
    """CIP Connection parameters"""
    name = "CIP_ConnectionParam"
    fields_desc = [
        scapy_all.BitEnumField("owner", 0, 1, {0: "exclusive", 1: "multiple"}),
        scapy_all.BitEnumField("connection_type", 2, 2,
                               {0: "null", 1: "multicast", 2: "point-to-point", 3: "reserved"}),
        scapy_all.BitField("reserved", 0, 1),
        scapy_all.BitEnumField("priority", 0, 2, {0: "low", 1: "high", 2: "scheduled", 3: "urgent"}),
        scapy_all.BitEnumField("connection_size_type", 0, 1, {0: "fixed", 1: "variable"}),
        scapy_all.BitField("connection_size", 500, 9),
    ]

    def pre_dissect(self, s):
        b = struct.unpack('<H', s[:2])[0]
        return struct.pack('>H', int(b)) + s[2:]

    def do_build(self):
        # p = ''
        # Corrected issue of malformed packet construction when attempting to
        # communicate with PLC - MED
        p = super(CIP_ConnectionParam, self).do_build()
        return p[::-1] # we have to flip the output

    def extract_padding(self, s):
        return '', s
示例#4
0
class CIP_LogicalSegment(scapy_all.Packet):
    name="CIP_LogicalSegment"

    LOGICAL_TYPE = {
        0: "Class ID",
        1: "Instance ID",
        2: "Member ID",
        3: "Connection Point",
        4: "Attribute ID",
        5: "Special",
        6: "Service ID",
        7: "Reserved"
    # The Special and Service ID Logical Types do not use the logical addressing definition for the Logical Format.
    }

    LOGICAL_FORMAT = {
        0: "8 - bit logical address",
        1: "16-bit logical address",
        2: "32-bit logical address",
        3: "Reserved for future use"
    }

    fields_desc = [
        scapy_all.BitEnumField("logical_type", 0, 3, LOGICAL_TYPE),
        scapy_all.BitEnumField("logical_format", 0, 2, LOGICAL_FORMAT),
        # When the logical segment is included within a Padded Path, the 16 - bit and 32 - bit
        # logical formats shall have a pad inserted between the segment type byte and the Logical Value
        # (the 8 - bit format is identical to the Packed Path).The    pad    byte    shall    be    set    to    zero.
        scapy_all.ConditionalField(scapy_all.ByteField("padding", 0), lambda p: p.logical_format > 0x0),
        # scapy_all.ByteField("value", 0),
        scapy_all.ConditionalField(
            scapy_all.ByteField("value8bit", 0),
            lambda p:
                p.logical_format >= 0x0
        ),
        scapy_all.ConditionalField(
            scapy_all.LEShortField("value16bit", 0),
            lambda p:
                p.logical_format >= 0x1
        ),
        scapy_all.ConditionalField(
            scapy_all.LELongField("value32bit", 0),
            lambda p:
                p.logical_format >= 0x2
        ),
    ]

    def extract_padding(self, p):
        # print self.__class__.__name__ + ": P=" + str(p)
        return "", p
示例#5
0
class SWAT_P1_RIO_DI(scapy_all.Packet):
    name = 'SWAT_P1_RIO_DI'
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.LEIntField('padding', 0),
        scapy_all.BitEnumField('pump2_fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump2_run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump2_auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump1_fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump1_run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('pump1_auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('rio_wireless', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('plc_wireless', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitField('spare', 0, 6),
        scapy_all.BitEnumField('valve_close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('valve_open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.LEShortField('spare2', 0),
    ]
示例#6
0
class SecurityExtension(scapy.Packet):
    name = "SCION Security Extension"
    fields_desc = [
        scapy.BitEnumField('next_hdr', None, 8, scapy.IP_PROTOS),
        scapy.ByteField('hdr_len', None),
        scapy.XByteField('extType', 0x2),
        scapy.ByteEnumField("secMode", 0x0, {
            0x0: "AES-CMAC",
            0x1: "HMAC_SHA256",
            0x2: "Ed25519",
            0x3: "GCM_AES128"
        }),
        scapy.XBitField('metadata', 0xffffffff, 4 * 8),
        scapy.MultipleTypeField([
            (scapy.XBitField('authenticator', None,
                             16 * 8), lambda pkt: pkt.secMode == 0x0),
            (scapy.XBitField('authenticator', None,
                             32 * 8), lambda pkt: pkt.secMode == 0x1),
            (scapy.XBitField('authenticator', None,
                             64 * 8), lambda pkt: pkt.secMode == 0x2),
            (scapy.XBitField('authenticator', None,
                             16 * 8), lambda pkt: pkt.secMode == 0x3),
        ], scapy.StrField("authenticator", None)),
    ]

    def extract_padding(self, p):
        # TODO fix when removing hard-coded v4
        return "", p

    def post_build(self, pkt, pay):
        if self.hdr_len == None:
            self.hdr_len = len(pkt)
            pkt = pkt[:1] + struct.pack('B', int(self.hdr_len / 8)) + pkt[2:]
        return pkt + pay
示例#7
0
class CIP_PortSegment(scapy_all.Packet):
    name="CIP_PortSegment"

    PORT_IDENT={
        0: "Reserved",
        1: "Back-Plane",
        15: "Extended",
    }

    fields_desc = [
        scapy_all.BitField("extended_link_address_size", 0, 1),
        scapy_all.BitEnumField("port_identifier", 0, 4, PORT_IDENT),
        scapy_all.ByteField("link_address_size", 0),
        scapy_all.ConditionalField(
            scapy_all.LEIntField("extended_port_identifier", 0),
            lambda p: p.port_identifier == 0xf  # If the Port Identifier is 15, then a 16-bit field, called the Extended Port Identifier, shall be the next part of the Port Segment
        ),
        scapy_all.ConditionalField(
                scapy_all.FieldListField("Link_Address", [],
                                         scapy_all.XByteField("",0), length_from=lambda p: p.link_address_size
                                         ),
            lambda p: p.extended_link_address_size == 0x1 # If the Port Identifier is 15, then a 16-bit field, called the Extended Port Identifier, shall be the next part of the Port Segment
        )
    ]

    def extract_padding(self, p):
        print self.__class__.__name__ + ": P=" + str(p)
        return "", p
示例#8
0
class CIP(scapy_all.Packet):
    name = "CIP"
    fields_desc = [
        scapy_all.BitEnumField("direction", None, 1, {
            0: "request",
            1: "response"
        }),
        utils.XBitEnumField(
            "service",
            0,
            7,
            {
                0x01: "Get_Attribute_All",
                0x02: "Set_Attribute_All",
                0x03: "Get_Attribute_List",
                0x04: "Set_Attribute_List",
                0x05: "Reset",
                0x06: "Start",
                0x07: "Stop",
                0x08: "Create",
                0x09: "Delete",
                0x0a: "Multiple_Service_Packet",
                0x0d: "Apply_attributes",
                0x0e: "Get_Attribute_Single",
                0x10: "Set_Attribute_Single",
                0x4b:
                "Execute_PCCC_Service",  # PCCC = Programmable Controller Communication Commands
                0x4c: "Read_Tag_Service",
                0x4d: "Write_Tag_Service",
                0x4e: "Read_Modify_Write_Tag_Service",
                0x4f: "Read_Other_Tag_Service",  # ???
                0x52: "Read_Tag_Fragmented_Service",
                0x53: "Write_Tag_Fragmented_Service",
                0x54: "Forward_Open?",
            }),
        scapy_all.PacketListField("path", [],
                                  CIP_Path,
                                  count_from=lambda p: 1
                                  if p.direction == 0 else 0),
        scapy_all.PacketListField("status", [],
                                  CIP_ResponseStatus,
                                  count_from=lambda p: 1
                                  if p.direction == 1 else 0),
    ]

    def post_build(self, p, pay):
        is_response = (self.direction == 1)
        if self.direction is None and not self.path:
            # Transform the packet into a response
            p = "\x01" + p[1:]
            is_response = True

        if is_response:
            # Add a success status field if there was none
            if not self.status:
                p = p[0:1] + b"\0\0\0" + p[1:]
        return p + pay
示例#9
0
class CIP_ConnectionParam(scapy_all.Packet):
    """CIP Connection parameters"""
    name = "CIP_ConnectionParam"
    fields_desc = [
        scapy_all.BitEnumField("owner", 0, 1, {
            0: "exclusive",
            1: "multiple"
        }),
        scapy_all.BitEnumField("connection_type", 2, 2, {
            0: "null",
            1: "multicast",
            2: "point-to-point",
            3: "reserved"
        }),
        scapy_all.BitField("reserved", 0, 1),
        scapy_all.BitEnumField("priority", 0, 2, {
            0: "low",
            1: "high",
            2: "scheduled",
            3: "urgent"
        }),
        scapy_all.BitEnumField("connection_size_type", 0, 1, {
            0: "fixed",
            1: "variable"
        }),
        scapy_all.BitField("connection_size", 500, 9),
    ]

    def pre_dissect(self, s):
        b = struct.unpack('<H', s[:2])[0]
        return struct.pack('>H', int(b)) + s[2:]

    def do_build(self):
        p = ''
        return p

    def extract_padding(self, s):
        return '', s
示例#10
0
class SWAT_TAGS(scapy_all.Packet):
    name = 'SWAT_TAGS'

    TAG_CODES = {
        0xa002b3a2: "HMI_MV",
        0xa002e1e2: "HMI_FIT",
        0xa0020cb9: "HMI_LIT",
        0xa0020cb9: "HMI_AIT",
        0xa0020cb9: "HMI_P"
    }

    fields_desc = [
        scapy_all.BitEnumField('tag', 0, 32, TAG_CODES)                                     
    ]                       
示例#11
0
class SWAT_MV(scapy_all.Packet):
    name = 'SWAT_MV'
    fields_desc = [
        scapy_all.ByteEnumField('cmd', 0, {1: 'closed', 2: 'open'}),
        scapy_all.ByteField('spare2', 0),
        scapy_all.ByteEnumField('status', 0, {1: 'closed', 2: 'open'}),
        scapy_all.ByteField('spare3', 0),
        scapy_all.BitEnumField('spare4', 0, 1, {}),
        scapy_all.BitEnumField('spare5', 0, 1, {}),
        scapy_all.BitEnumField('spare6', 0, 1, {}),
        scapy_all.BitEnumField('Avl', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FTC', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FTO', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Reset', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.X3BytesField('Spare7', 0)
    ] 
示例#12
0
class CIP_PathPadded(scapy_all.Packet):
    name="CIP_PathPadded"
    fields_desc = [
        scapy_all.BitEnumField("segment_type", 0, 3, SEGMENT_TYPE),
        # scapy_all.PacketField("segment", CIP_PortSegment(),CIP_PortSegment),
        # scapy_all.BitEnumField("don't care", 0, 5, SEGMENT_TYPE),
        # scapy_all.LEShortField("zero", 0),
        # scapy_all.LEShortField("length", None),
    ]

    def extract_padding(self, p):
        print self.__class__.__name__+": P="+str(p)
        # print self.__class__.__name__+": Length="+str(self.length)
        q,w=p
        # return "",(q,8-w,)
        # return (w,q[:2]), (q,  w,)
        # return p[:self.length], p[self.length:]
        return (q,w,),(q,8-w,)
示例#13
0
class SWAT_AIT(scapy_all.Packet):
    name = 'SWAT_AIT'
    fields_desc = [        
        scapy_all.LEIntField('Pv', 0),
        scapy_all.LEIntField('Heu', 0),
        scapy_all.LEIntField('Leu', 0),
        scapy_all.LEIntField('SALL', 0),
        scapy_all.LEIntField('SAL', 0),
        scapy_all.LEIntField('SAH', 0),
        scapy_all.LEIntField('SAHH', 0),
        scapy_all.BitEnumField('status', 0, 1, {0: 'unhealthy', 1: 'healthy'}),
        scapy_all.BitEnumField('Rst_Totaliser', 0, 1, {0: 'unhealthy', 1: 'healthy'}),
        scapy_all.BitEnumField('WiFi', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('control', 0, 1, {0: 'actual', 1: 'simulation'}),
        scapy_all.BitEnumField('ALL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('AL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('AH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('AHH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.X3BytesField('Spare', 0),
        scapy_all.LEIntField('Sim_Pv', 0),

    ]            
示例#14
0
class SWAT_P(scapy_all.Packet):
    name = 'SWAT_P'
    fields_desc = [
        scapy_all.ByteEnumField('cmd', 0, {1: 'closed', 2: 'open'}),
        scapy_all.ByteField('spare2', 0),
        scapy_all.ByteEnumField('status', 0, {1: 'closed', 2: 'open'}),
        scapy_all.ByteField('spare3', 0),
        scapy_all.LEIntField('RunMin', 0),
        scapy_all.LEIntField('Total_RunMin', 0),
        scapy_all.LEIntField('RunHr', 0),
        scapy_all.LEIntField('Total_RunHr', 0),
        scapy_all.LEIntField('Permissive', 0),
        scapy_all.LEIntField('Shutdown', 0),
        scapy_all.LEIntField('SD', 0),
        scapy_all.BitEnumField('Avl', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Remote', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FTS', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FTR', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Reset_RunHr', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('Reset', 0, 1, {0: 'disable', 1: 'enable'}),
    ] 
示例#15
0
class SWAT_P4_RIO_DO(scapy_all.Packet):
    name = "SWAT_P4_RIO_DO"
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.ByteField('number', 0),
        scapy_all.StrFixedLenField('reserved', 0, length=5),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('UV_Start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P404_Start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P403_Start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P402_Start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P401_Start', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
    ]
示例#16
0
class SWAT_P4_RIO_DI(scapy_all.Packet):
    name = 'SWAT_P4_RIO_DI'
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.LEIntField('padding', 0),
        scapy_all.BitEnumField('P402_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P402_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P402_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P401_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P401_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P401_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('RIO4_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('PLC4_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('UV401_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('UV401_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P404_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P404_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P404_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P403_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P403_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P403_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS401_Low', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('UV401_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
    ]
示例#17
0
class SWAT_P2_RIO_DI(scapy_all.Packet):
    name = "SWAT_P2_RIO_DI" 
    fields_desc =[
        scapy_all.LEShortField('counter', 0),
        scapy_all.LEIntField('padding', 0),


        scapy_all.BitEnumField('P202_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P202_Run', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P202_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P201_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P201_Run', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P201_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('RIO2_Wifi', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('PLC2_Wifi', 0, 1, {0: 'disable', 1: 'enable'}),

        scapy_all.BitEnumField('P205_Run', 0, 1, {0: 'disable', 1: 'enable'}),
		scapy_all.BitEnumField('P205_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P204_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P204_Run', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P204_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P203_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P203_Run', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P203_Auto', 0, 1, {0: 'disable', 1: 'enable'}),

		scapy_all.BitEnumField('P208_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P207_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
    	scapy_all.BitEnumField('P207_Run', 0, 1, {0: 'disable', 1: 'enable'}),
		scapy_all.BitEnumField('P207_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P206_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P206_Run', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P206_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P205_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
        
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LS203_Low', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LS202_Low', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LS201_Low', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV201_Close', 0, 1, {0: 'disable', 1: 'enable'}), 
        scapy_all.BitEnumField('MV201_Open', 0, 1, {0: 'disable', 1: 'enable'}),  
        scapy_all.BitEnumField('P208_Fault', 0, 1, {0: 'disable', 1: 'enable'}),
    	scapy_all.BitEnumField('P208_Run', 0, 1, {0: 'disable', 1: 'enable'}),
       
    ]
示例#18
0
class SWAT_P2_RIO_DO(scapy_all.Packet):
    name = "SWAT_P2_RIO_DO"
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.ByteField('number', 0),
        scapy_all.StrFixedLenField('reserved', 0, length=5),
       
        scapy_all.BitEnumField('P208_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P207_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P206_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P205_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P204_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P203_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P202_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('P201_Start', 0, 1, {0: 'disable', 1: 'enable'}),
	   
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('spare', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LED_RED', 0, 1, {0: 'disable', 1: 'enable'}),  #LED_RED
        scapy_all.BitEnumField('MV201_Close', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV201_Open', 0, 1, {0: 'disable', 1: 'enable'}),
        
    ]
示例#19
0
class SWAT_P6_RIO_DI(scapy_all.Packet):
    name = 'SWAT_P6_RIO_DI'
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.LEIntField('padding', 0),
        scapy_all.BitEnumField('P602_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P602_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P602_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P601_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P601_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P601_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('RIO6_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('PLC6_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS603_Low', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS602_High', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS602_Low', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS601_High', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS601_Low', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P603_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P603_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P603_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('LS603_High', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
    ]
示例#20
0
class SWAT_P5_RIO_DI(scapy_all.Packet):
    name = 'SWAT_P5_RIO_DI'
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.LEIntField('padding', 0),
        scapy_all.BitEnumField('P502_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P502_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P502_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P501_Fault', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P501_Run', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('P501_Auto', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('RIO5_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('PLC5_Wifi', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV504_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV504_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV503_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV503_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV502_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV502_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV501_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV501_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        #scapy_all.BitEnumField('VSD502_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        #scapy_all.BitEnumField('VSD501_Start', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.LEShortField('VSD502_Start', 0),  #VSD is pump
        scapy_all.LEShortField('VSD501_Start', 0),
        scapy_all.BitEnumField('PSH501_High', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('PSL501_Low', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
    ]
示例#21
0
class SWAT_P5_RIO_DO(scapy_all.Packet):
    name = "SWAT_P5_RIO_DO"
    fields_desc = [
        scapy_all.LEShortField('counter', 0),
        scapy_all.ByteField('number', 0),
        scapy_all.StrFixedLenField('reserved', 0, length=5),
        scapy_all.BitEnumField('MV504_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV504_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV503_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV503_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV502_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV502_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV501_Close', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('MV501_Open', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
        scapy_all.BitEnumField('spare', 0, 1, {
            0: 'disable',
            1: 'enable'
        }),
    ]
示例#22
0
class SWAT_P1_ALL(scapy_all.Packet):
    name = 'SWAT_P1_ALL'
    fields_desc = [
        scapy_all.LEIntField('FIT101_Pv', 0),
        scapy_all.LEIntField('LIT101_Pv', 0),
        scapy_all.ByteField('spare3', 0),
        scapy_all.ByteField('spare4', 0),
        scapy_all.ByteEnumField('P101_cmd', 0, {1: 'off', 2: 'on'}),
        scapy_all.ByteField('spare5', 0),
        scapy_all.ByteEnumField('P102_cmd', 0, {1: 'off', 2: 'on'}),
        scapy_all.ByteField('spare6', 0),
        scapy_all.ByteField('spare7', 0),
        scapy_all.ByteField('spare8', 0),
        scapy_all.BitEnumField('FIT101_status', 0, 1, {0: 'unhealthy', 1: 'healthy'}),
        scapy_all.BitEnumField('FIT101_Rst_Totaliser', 0, 1, {0: 'unhealthy', 1: 'healthy'}),
        scapy_all.BitEnumField('FIT101_WiFi', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FIT101_control', 0, 1, {0: 'actual', 1: 'simulation'}),
        scapy_all.BitEnumField('FIT101_ALL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FIT101_AL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FIT101_AH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('FIT101_AHH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.ByteField('spare9', 0),
        scapy_all.LEIntField('FIT101_H', 0),
        scapy_all.LEIntField('FIT101_HH', 0),
        scapy_all.LEIntField('FIT101_L', 0),
        scapy_all.LEIntField('FIT101_LL', 0),
        scapy_all.BitEnumField('LIT101_spare', 0, 1, {}),
        scapy_all.BitEnumField('LIT101_control', 0, 1, {0: 'actual', 1: 'simulation'}),
        scapy_all.BitEnumField('LIT101_status', 0, 1, {0: 'unhealthy', 1: 'healthy'}),
        scapy_all.BitEnumField('LIT101_WiFi', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LIT101_ALL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LIT101_AL', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LIT101_AH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('LIT101_AHH', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.LEIntField('LIT101_SALL', 0),
        scapy_all.LEIntField('LIT101_SAL', 0),
        scapy_all.LEIntField('LIT101_SAH', 0),
        scapy_all.LEIntField('LIT101_SAHH', 0),
        scapy_all.BitEnumField('spare10', 0, 1, {}),
        scapy_all.BitEnumField('spare11', 0, 1, {}),
        scapy_all.BitEnumField('spare12', 0, 1, {}),
        scapy_all.BitEnumField('MV101_Avl', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV101_FTC', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV101_FTO', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV101_Auto', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.BitEnumField('MV101_Reset', 0, 1, {0: 'disable', 1: 'enable'}),
        scapy_all.ByteEnumField('MV101_status', 0, {1: 'off', 2: 'on'}),
        scapy_all.ByteField('spare13', 0),
        scapy_all.ByteField('spare14', 0),
        scapy_all.ByteEnumField('P101_status', 0, {1: 'off', 2: 'on'}),
        scapy_all.X3BytesField('Spare', 0),
        scapy_all.LEIntField('spare15', 0),
        scapy_all.LEIntField('spare16', 0),
        scapy_all.LEIntField('spare17', 0),
        scapy_all.LEIntField('spare18', 0),
        scapy_all.LEIntField('P101_RunHr', 0),
        scapy_all.LEIntField('P101_RunHr2', 0),
        scapy_all.ByteField('spare19', 0),
        scapy_all.ByteField('spare20', 0),
        scapy_all.LEIntField('P101_Permissive', 0),
        scapy_all.LEIntField('spare21', 0)
        # scapy_all.ByteField('spare4', 0),
        # scapy_all.LEIntField('spare', 0),
        # scapy_all.LEIntField('LIT101_Sim_Pv', 0),
        # scapy_all.ByteField('spare4', 0),
        # scapy_all.ByteField('spare5', 0),
        # scapy_all.LEIntField('P102_RunHr', 0),
        # scapy_all.LEIntField('P102_RunHr', 0),
        # scapy_all.ByteField('spare4', 0),
        # scapy_all.ByteField('spare5', 0),
        # scapy_all.LEIntField('P102_Permissive', 0),
        # scapy_all.LEIntField('spare', 0)
    ]