Exemple #1
0
class SCTPChunkParamErrorIndication(_SCTPChunkParam, Packet):
    fields_desc = [ShortEnumField("type", 0xc003, sctpchunkparamtypes),
                   FieldLenField("len", None, length_of="error_causes",
                                 adjust=lambda pkt, x:x + 8),
                   XIntField("correlation_id", None),
                   PadField(StrLenField("error_causes", "",
                                        length_from=lambda pkt: pkt.len - 4),
                            4, padwith=b"\x00"), ]
Exemple #2
0
class GMLAN_RMBA(Packet):
    name = 'ReadMemoryByAddress'
    fields_desc = [
        MultipleTypeField([
            (XShortField('memoryAddress',
                         0), lambda pkt: GMLAN.determine_len(2)),
            (X3BytesField('memoryAddress',
                          0), lambda pkt: GMLAN.determine_len(3)),
            (XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4))
        ], XIntField('memoryAddress', 0)),
        XShortField('memorySize', 0),
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%GMLAN.service%"), \
            pkt.sprintf("%GMLAN_RMBA.memoryAddress%")
Exemple #3
0
class PPTPEchoRequest(PPTP):
    name = "PPTP Echo Request"
    fields_desc = [LenField("len", 16),
                   ShortEnumField("type", 1, _PPTP_msg_type),
                   XIntField("magic_cookie", _PPTP_MAGIC_COOKIE),
                   ShortEnumField("ctrl_msg_type", 5, _PPTP_ctrl_msg_type),
                   XShortField("reserved_0", 0x0000),
                   IntField("identifier", None)]
Exemple #4
0
class PHYPayload(Packet):
    name = "PHYPayload"
    fields_desc = [
        MHDR, MACPayload,
        ConditionalField(
            XIntField("MIC", 0), lambda pkt:
            (pkt.MType != 0b001 or LoRa.encrypted is False))
    ]
class PROFIsafeControlCRCSeed(PROFIsafeCRCSeed):
    name = "PROFISafe Control Message with F_CRC_Seed=1"
    fields_desc = [
        StrFixedLenField("data", '',
                         length_from=lambda p: p.get_data_length()),
        FlagsField("control", 0, 8, profisafe_control_flags),
        XIntField("crc", 0)
    ]
Exemple #6
0
class CARP(Packet):
    name = "CARP"
    fields_desc = [
        BitField("version", 4, 4),
        BitField("type", 4, 4),
        ByteField("vhid", 1),
        ByteField("advskew", 0),
        ByteField("authlen", 0),
        ByteField("demotion", 0),
        ByteField("advbase", 0),
        XShortField("chksum", 0),
        XIntField("counter1", 0),
        XIntField("counter2", 0),
        XIntField("hmac1", 0),
        XIntField("hmac2", 0),
        XIntField("hmac3", 0),
        XIntField("hmac4", 0),
        XIntField("hmac5", 0)
    ]

    def post_build(self, pkt, pay):
        if self.chksum == None:
            pkt = pkt[:6] + struct.pack("!H", checksum(pkt)) + pkt[8:]

        return pkt
Exemple #7
0
class PPTPCallClearRequest(PPTP):
    name = "PPTP Call Clear Request"
    fields_desc = [LenField("len", 16),
                   ShortEnumField("type", 1, _PPTP_msg_type),
                   XIntField("magic_cookie", _PPTP_MAGIC_COOKIE),
                   ShortEnumField("ctrl_msg_type", 12, _PPTP_ctrl_msg_type),
                   XShortField("reserved_0", 0x0000),
                   ShortField("call_id", 1),
                   XShortField("reserved_1", 0x0000)]
Exemple #8
0
class GMLAN_DPBA(Packet):
    name = 'DefinePIDByAddress'
    fields_desc = [
        XShortField('parameterIdentifier', 0),
        MultipleTypeField([
            (XShortField('memoryAddress',
                         0), lambda pkt: GMLAN.determine_len(2)),
            (X3BytesField('memoryAddress',
                          0), lambda pkt: GMLAN.determine_len(3)),
            (XIntField('memoryAddress', 0), lambda pkt: GMLAN.determine_len(4))
        ], XIntField('memoryAddress', 0)),
        XByteField('memorySize', 0),
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%GMLAN.service%"), \
            (pkt.parameterIdentifier, pkt.memoryAddress, pkt.memorySize)
Exemple #9
0
class Pktgen(Packet):
    name = 'PKTGEN'
    fields_desc = [
        XIntField('magic', 0xbe9be955),
        IntField('seq', 0),
        IntField('tvsec', 0),
        IntField('tvusec', 0),
        StrFixedLenField('data', '\x00\x00\x00\x00\x00\x00', length=6)
    ]
Exemple #10
0
class OFPQTMinRate(_ofp_header):
    name = "OFPQT_MIN_RATE"
    fields_desc = [
        ShortEnumField("type", 1, ofp_queue_property_types),
        ShortField("len", 16),
        XIntField("pad", 0),
        ShortField("rate", 0),
        XBitField("pad2", 0, 48)
    ]
Exemple #11
0
class LLS_Crypto_Auth(LLS_Generic_TLV):
    name = "LLS Cryptographic Authentication"
    fields_desc = [
        ShortField("type", 2),
        FieldLenField("len", 20, fmt="B",
                      length_of=lambda x: x.authdata + 4),  # noqa: E501
        XIntField("sequence", 0),
        StrLenField("authdata", b"\x00" * 16, length_from=lambda x: x.len - 4)
    ]  # noqa: E501
Exemple #12
0
class DiagnosisItem(AlarmItem):
    fields_desc = [
        XShortField("UserStructureIdentifier", 0),
        XShortField("ChannelNumber", 0),
        XShortField("ChannelProperties", 0),
        XShortField("ChannelErrorType", 0),
        ConditionalField(
            cond=lambda p: p.getfieldval("UserStructureIdentifier") in [
                0x8002, 0x8003],
            fld=XShortField("ExtChannelErrorType", 0)),
        ConditionalField(
            cond=lambda p: p.getfieldval("UserStructureIdentifier") in [
                0x8002, 0x8003],
            fld=XIntField("ExtChannelAddValue", 0)),
        ConditionalField(
            cond=lambda p: p.getfieldval("UserStructureIdentifier") == 0x8003,
            fld=XIntField("QualifiedChannelQualifier", 0)),
    ]
Exemple #13
0
class ISIS_LspEntry(Packet):
    name = "ISIS LSP Entry"
    fields_desc = [ShortField("lifetime", 1200),
                   ISIS_LspIdField("lspid", "0102.0304.0506.07-08"),
                   XIntField("seqnum", 0x00000001),
                   XShortField("checksum", None)]

    def extract_padding(self, s):
        return "", s
Exemple #14
0
class RPC(Packet):
    name = 'RPC'
    fields_desc = [
        XIntField('xid', 0),
        IntEnumField('mtype', 0, {
            0: 'CALL',
            1: 'REPLY'
        }),
    ]
Exemple #15
0
class IntL45DropReport(Packet):
    name = "INT_L45_DROP_REPORT"
    fields_desc = [
        XIntField("switch_id", 0),
        XShortField("ingress_port_id", 0),
        XShortField("egress_port_id", 0),
        BitField("queue_id", 0, 8),
        BitField("pad", 0, 24),
    ]
Exemple #16
0
class LocatorPacket(Packet):
    name = "RTPS Locator"
    fields_desc = [
        XIntField("locatorKind", 0),
        LEIntField("port", 0),
        ReversePadField(IPField("address", "0.0.0.0"), 20),
    ]

    def extract_padding(self, p):
        return b"", p
Exemple #17
0
class BuildChecksum(Packet):
    # Build checksum over memory range
    fields_desc = [
        # specification says: position 1-3 type byte The example(Part 5
        # Example Communication Sequences ) shows 3 bytes for "reserved"
        # http://read.pudn.com/downloads192/doc/comm/903802/XCP%20-Part%205-%20Example%20Communication%20Sequences%20-1.0.pdf # noqa: E501
        # --> 3 bytes
        XCPEndiannessField(ThreeBytesField("reserved", 0)),
        XCPEndiannessField(XIntField("block_size", 0))
    ]
Exemple #18
0
class ACCESS_Reply(Packet):
    name = 'ACCESS Reply'
    fields_desc = [
        IntEnumField('status', 0, nfsstat3),
        IntField('attributes_follow', 0),
        ConditionalField(PacketField('attributes', Fattr3(), Fattr3),
                         lambda pkt: pkt.attributes_follow == 1),
        ConditionalField(XIntField('access_rights', 0),
                         lambda pkt: pkt.status == 0)
    ]
Exemple #19
0
class ExpectedSubmoduleAPI(Packet):
    """Description of an API in the expected submodules blocks"""
    name = "API"
    fields_desc = [
        XIntField("API", 0),
        XShortField("SlotNumber", 0),
        XIntField("ModuleIdentNumber", 0),
        XShortField("ModuleProperties", 0),
        FieldLenField("NumberOfSubmodules",
                      None,
                      fmt="H",
                      count_of="Submodules"),
        PacketListField("Submodules", [],
                        ExpectedSubmodule,
                        count_from=lambda p: p.NumberOfSubmodules),
    ]

    def extract_padding(self, s):
        return None, s  # No extra payload
Exemple #20
0
class RM_Header(Packet):
    name = 'RM Header'
    fields_desc = [XIntField('rm', None)]

    def post_build(self, pkt, pay):
        """Override of post_build to set the rm header == len(payload)"""
        if self.rm is None:
            new_rm = 0x80000000 + len(self.payload)
            pkt = struct.pack('!I', new_rm)
        return Packet.post_build(self, pkt, pay)
Exemple #21
0
class OSPF_External_LSA(OSPF_BaseLSA):
    name = "OSPF External LSA (ASBR)"
    fields_desc = [ShortField("age", 1),
                   OSPFOptionsField(),
                   ByteField("type", 5),
                   IPField("id", "192.168.0.0"),
                   IPField("adrouter", "2.2.2.2"),
                   XIntField("seq", 0x80000001),
                   XShortField("chksum", None),
                   ShortField("len", None),
                   IPField("mask", "255.255.255.0"),
                   FlagsField("ebit", 0, 1, ["E"]),
                   BitField("reserved", 0, 7),
                   X3BytesField("metric", 20),
                   IPField("fwdaddr", "0.0.0.0"),
                   XIntField("tag", 0),
                   # TODO: Define correct conditions
                   ConditionalField(ByteField("tos", 0), lambda pkt:False),
                   ConditionalField(X3BytesField("tosmetric", 0), lambda pkt:False)]  # noqa: E501
Exemple #22
0
class NSH(Packet):
    """Network Service Header.
       NSH MD-type 1 if there is no ContextHeaders"""
    name = "NSH"

    fields_desc = [
        BitField('Ver', 0, 2),
        BitField('OAM', 0, 1),
        BitField('Critical', 0, 1),
        BitField('Reserved', 0, 6),
        BitFieldLenField('Len',
                         None,
                         6,
                         count_of='ContextHeaders',
                         adjust=lambda pkt, x: 6
                         if pkt.MDType == 1 else x + 2),
        ByteEnumField('MDType', 1, {
            1: 'Fixed Length',
            2: 'Variable Length'
        }),
        ByteEnumField('NextProto', 3, {
            1: 'IPv4',
            2: 'IPv6',
            3: 'Ethernet',
            4: 'NSH',
            5: 'MPLS'
        }),
        X3BytesField('NSP', 0),
        ByteField('NSI', 1),
        ConditionalField(XIntField('NPC', 0), lambda pkt: pkt.MDType == 1),
        ConditionalField(XIntField('NSC', 0), lambda pkt: pkt.MDType == 1),
        ConditionalField(XIntField('SPC', 0), lambda pkt: pkt.MDType == 1),
        ConditionalField(XIntField('SSC', 0), lambda pkt: pkt.MDType == 1),
        ConditionalField(
            PacketListField("ContextHeaders",
                            None,
                            NSHTLV,
                            count_from="Length"), lambda pkt: pkt.MDType == 2)
    ]

    def mysummary(self):
        return self.sprintf("NSP: %NSP% - NSI: %NSI%")
Exemple #23
0
class PPTPStopControlConnectionRequest(PPTP):
    name = "PPTP Stop Control Connection Request"
    fields_desc = [LenField("len", 16),
                   ShortEnumField("type", 1, _PPTP_msg_type),
                   XIntField("magic_cookie", _PPTP_MAGIC_COOKIE),
                   ShortEnumField("ctrl_msg_type", 3, _PPTP_ctrl_msg_type),
                   XShortField("reserved_0", 0x0000),
                   ByteEnumField("reason", 1,
                                 _PPTP_stop_control_connection_reason),
                   XByteField("reserved_1", 0x00),
                   XShortField("reserved_2", 0x0000)]
Exemple #24
0
class GMLAN_RMBA(Packet):
    name = 'ReadMemoryByAddress'
    fields_desc = [
        ConditionalField(XShortField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(2)),
        ConditionalField(X3BytesField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(3)),
        ConditionalField(XIntField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(4)),
        XShortField('memorySize', 0),
    ]
Exemple #25
0
class GMLAN_RMBAPR(Packet):
    name = 'ReadMemoryByAddressPositiveResponse'
    fields_desc = [
        ConditionalField(XShortField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(2)),
        ConditionalField(X3BytesField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(3)),
        ConditionalField(XIntField('memoryAddress', 0),
                         lambda pkt: GMLAN.determine_len(4)),
        StrField('dataRecord', None, fmt="B")
    ]
Exemple #26
0
class GMLAN_RD(Packet):
    name = 'RequestDownload'
    fields_desc = [
        XByteField('dataFormatIdentifier', 0),
        ConditionalField(XShortField('memorySize', 0),
                         lambda pkt: GMLAN.determine_len(2)),
        ConditionalField(X3BytesField('memorySize', 0),
                         lambda pkt: GMLAN.determine_len(3)),
        ConditionalField(XIntField('memorySize', 0),
                         lambda pkt: GMLAN.determine_len(4)),
    ]
Exemple #27
0
class UnassocSTALinkMetricsResponse_STA(Packet):
    name = "Unassociated STA"
    fields_desc = [
        MACField("mac", None),
        XByteField("chnl_num", None),
        XIntField("time_delta", None),
        XByteField("uplink_rcpi", None)
    ]

    def extract_padding(self, s):
        return "", s
Exemple #28
0
class GMLAN_TD(Packet):
    subfunctions = {0x00: "download", 0x80: "downloadAndExecuteOrExecute"}
    name = 'TransferData'
    fields_desc = [
        ByteEnumField('subfunction', 0, subfunctions),
        MultipleTypeField([(XShortField(
            'startingAddress', 0), lambda pkt: GMLAN.determine_len(2)),
                           (X3BytesField('startingAddress', 0),
                            lambda pkt: GMLAN.determine_len(3)),
                           (XIntField('startingAddress',
                                      0), lambda pkt: GMLAN.determine_len(4))],
                          XIntField('startingAddress', 0)),
        StrField("dataRecord", b"")
    ]

    @staticmethod
    def get_log(pkt):
        return pkt.sprintf("%GMLAN.service%"), \
            (pkt.sprintf("%GMLAN_TD.subfunction%"), pkt.startingAddress,
             pkt.dataRecord)
Exemple #29
0
class GRE(Packet):
    name = "GRE"
    deprecated_fields = {
        "seqence_number": ("sequence_number", "2.4.4"),
    }
    fields_desc = [
        BitField("chksum_present", 0, 1),
        BitField("routing_present", 0, 1),
        BitField("key_present", 0, 1),
        BitField("seqnum_present", 0, 1),
        BitField("strict_route_source", 0, 1),
        BitField("recursion_control", 0, 3),
        BitField("flags", 0, 5),
        BitField("version", 0, 3),
        XShortEnumField("proto", 0x0000, ETHER_TYPES),
        ConditionalField(
            XShortField("chksum", None), lambda pkt: pkt.chksum_present == 1 or
            pkt.routing_present == 1),  # noqa: E501
        ConditionalField(
            XShortField("offset", None), lambda pkt: pkt.chksum_present == 1 or
            pkt.routing_present == 1),  # noqa: E501
        ConditionalField(XIntField("key", None),
                         lambda pkt: pkt.key_present == 1),  # noqa: E501
        ConditionalField(XIntField("sequence_number", None),
                         lambda pkt: pkt.seqnum_present == 1),  # noqa: E501
    ]

    @classmethod
    def dispatch_hook(cls, _pkt=None, *args, **kargs):
        # type: (Optional[Any], *Any, **Any) -> Type[Packet]
        if _pkt and struct.unpack("!H", _pkt[2:4])[0] == 0x880b:
            return GRE_PPTP
        return cls

    def post_build(self, p, pay):
        # type: (bytes, bytes) -> bytes
        p += pay
        if self.chksum_present and self.chksum is None:
            c = checksum(p)
            p = p[:4] + chb((c >> 8) & 0xff) + chb(c & 0xff) + p[6:]
        return p
Exemple #30
0
class SCTP(_SCTPChunkGuessPayload, Packet):
    fields_desc = [ShortField("sport", None),
                   ShortField("dport", None),
                   XIntField("tag", None),
                   XIntField("chksum", None), ]

    def answers(self, other):
        if not isinstance(other, SCTP):
            return 0
        if conf.checkIPsrc:
            if not ((self.sport == other.dport) and
                    (self.dport == other.sport)):
                return 0
        return 1

    def post_build(self, p, pay):
        p += pay
        if self.chksum is None:
            crc = crc32c(raw(p))
            p = p[:8] + struct.pack(">I", crc) + p[12:]
        return p