Esempio n. 1
0
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "ICMP"
        self.info['detail'] = "The Internet Control Message Protocol"
        self.info['rawdata_length'] = int(len(rawdata) / 2)

        # update additional protocol information
        for i, (info_name,
                format_info) in enumerate(self.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # update additional protocol information based on Type(Error-reporting(3,4,5,11,12) or Query(8,0,13,14))
        if (self.info['Type'] in [8, 0, 13, 14]):
            # Query Message
            format_info_dict_addition = {
                'identifier': [DataType.NUM, 32, 16],
                'sequence_number': [DataType.NUM, 48, 16]
            }
            for i, (info_name, format_info) in enumerate(
                    format_info_dict_addition.items()):
                self.info[info_name] = ParseHelper.getData(
                    rawdata, format_info)

            self.format_info_dict.update(format_info_dict_addition)
        """
Esempio n. 2
0
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "IPv6"
        self.info['detail'] = "The Internet Protocol Version 6"
        self.info['rawdata_length'] = int(len(rawdata) / 2)

        # update additional protocol information
        for i, (info_name,
                format_info) in enumerate(self.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # split header and data
        self.header = rawdata[0:self.header_size * 2]
        self.data = rawdata[self.header_size * 2:]

        # update detail-needed data info dict (_val)
        # update protocol data
        #self.info['protocol'] = "UNKNOWN"
        next_header = self.getDesc("next_header", self.info["next_header"])
        #self.correctAllDetailNeededKey()

        # set upperLayer Protocol
        # TODO: CREATE FACTORY CLASS
        if (next_header == "TCP"):
            self.upperLayer = TCP(self.data)
        elif (next_header == "UDP"):
            self.upperLayer = UDP(self.data)
        elif (next_header == "ICMP"):
            self.upperLayer = ICMP(self.data)
        elif (next_header == "SCTP"):
            self.upperLayer = SCTP(self.data)
        else:
            self.upperLayer = DefaultTrnansportLayer(self.data)
Esempio n. 3
0
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "Ethernet"
        self.info['detail'] = "The Ethernet technology"
        self.info['rawdata_length'] = int(len(rawdata)/2)

        self.header = rawdata[0:Ethernet.header_size*2]
        self.data = rawdata[Ethernet.header_size*2:]

        for i, (info_name, format_info) in enumerate(Ethernet.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(self.header, format_info)

        Type = self.getDesc("Type", self.info["Type"])

        # TODO: CREATE FACTORY CLASS
        if(Type == "IP"):
            self.upperLayer = IP(self.data)
        elif(Type == "ARP"):
            self.upperLayer = ARP(self.data)
        elif(Type == "ICMP"):
            self.upperLayer = ICMP(self.data)
        elif(Type == "IPv6"):
            self.upperLayer = IPv6(self.data)
        else:
            self.upperLayer = DefaultNetworkLayer(self.data)
Esempio n. 4
0
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "ARP"
        self.info['detail'] = "The Address Resolution Protocol"
        self.info['rawdata_length'] = int(len(rawdata) / 2)

        # update additional protocol information
        for i, (info_name,
                format_info) in enumerate(ARP.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # update HW and protocol address information
        address_format_info_dict = {
            "src_hw_addr":
            [DataType.MAC, 64, self.info['hardware_length'] * 8],
            "src_proto_addr": [
                DataType.IP, 64 + self.info['hardware_length'] * 8,
                self.info['protocol_length'] * 8
            ],
            "dst_hw_addr": [
                DataType.MAC, 64 + self.info['hardware_length'] * 8 +
                self.info['protocol_length'] * 8,
                self.info['hardware_length'] * 8
            ],
            "dst_proto_addr": [
                DataType.IP, 64 + self.info['hardware_length'] * 16 +
                self.info['protocol_length'] * 8,
                self.info['protocol_length'] * 8
            ]
        }
        for i, (info_name,
                format_info) in enumerate(address_format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # correct header length
        self.header_size = 64 + self.info['hardware_length'] * 2 + self.info[
            'protocol_length'] * 2

        # split header and data
        self.header = rawdata[0:self.header_size * 2]
        self.data = rawdata[self.header_size * 2:]

        # set upperLayer Protocol
        # ARP END
        self.upperLayer = DefaultTrnansportLayer(self.data)
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "SCTP"
        self.info['detail'] = "The Stream Control Transmission Protocol"
        self.info['rawdata_length'] = int(len(rawdata)/2)

        # update additional protocol information
        for i, (info_name, format_info) in enumerate(self.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # split header and data
        self.header = rawdata[0:self.header_size*2]
        self.data = rawdata[self.header_size*2:]

        self.upperLayer = DefaultApplicationLayer(self.data)
Esempio n. 6
0
    def simpleParse(rawdata):
        protocols = []
        length = int(len(rawdata) / 2)
        try:
            dst_mac = ParseHelper.getMACFormat(rawdata, 0, 12 * 8)
            src_mac = ParseHelper.getMACFormat(rawdata, 12 * 8, 24 * 8)

            ethernet_type = ParseHelper.getNumber(rawdata, 24 * 8, 28 * 8)
            if (ethernet_type == 0x0800):
                protocols.append("IP")
            else:
                protocols.append("UNKNOWN")

            return dict(src_mac=src_mac,
                        dst_mac=dst_mac,
                        src_ip='127.0.0.1',
                        dst_ip='127.0.0.2',
                        protocols=protocols,
                        length=length,
                        info='ㅎㅇㅎㅇ',
                        rawdata=rawdata)
        except Exception as e:
            print(e)
            return None
    def __init__(self, rawdata):
        super().__init__()
        self.info['name'] = "TCP"
        self.info['detail'] = "The Transmission Control Protocol"
        self.info['rawdata_length'] = int(len(rawdata)/2)

        # update additional protocol information
        for i, (info_name, format_info) in enumerate(self.format_info_dict.items()):
            self.info[info_name] = ParseHelper.getData(rawdata, format_info)

        # correct header length
        self.header_size = self.info['header_length'] * 4

        # rest for option (HARD CODING TEMPORARY!!) TODO: Need some DescType??
        if not self.header_size == 20:
            self.info['option'] = "0x"+rawdata[160//4:160//4+self.header_size]

        # split header and data
        self.header = rawdata[0:self.header_size*2]
        self.data = rawdata[self.header_size*2:]

        self.upperLayer = DefaultApplicationLayer(self.data)