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) """
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)
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)
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)
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)