def __build_node_information_message(class_object, type, code, payload = None): #Build ICMP6 header icmp_packet = ICMP6() icmp_packet.set_type(type) icmp_packet.set_code(code) #Pack ICMP payload qtype = 0 flags = 0 nonce = [0x00] * 8 icmp_bytes = struct.pack('>H', qtype) icmp_bytes += struct.pack('>H', flags) icmp_bytes += array_tobytes(array.array('B', nonce)) if payload is not None: icmp_bytes += array_tobytes(array.array('B', payload)) icmp_payload = Data() icmp_payload.set_data(icmp_bytes) #Link payload to header icmp_packet.contains(icmp_payload) return icmp_packet
def __build_error_message(class_object, type, code, data, originating_packet_data): #Build ICMP6 header icmp_packet = ICMP6() icmp_packet.set_type(type) icmp_packet.set_code(code) #Pack ICMP payload icmp_bytes = array_tobytes(array.array('B', data)) if (originating_packet_data is not None): icmp_bytes += array_tobytes(array.array('B', originating_packet_data)) icmp_payload = Data() icmp_payload.set_data(icmp_bytes) #Link payload to header icmp_packet.contains(icmp_payload) return icmp_packet
def __build_neighbor_message(class_object, msg_type, target_address): #Build ICMP6 header icmp_packet = ICMP6() icmp_packet.set_type(msg_type) icmp_packet.set_code(0) # Flags + Reserved icmp_bytes = array_tobytes(array.array('B', [0x00] * 4)) # Target Address: The IP address of the target of the solicitation. # It MUST NOT be a multicast address. icmp_bytes += array_tobytes(array.array('B', IP6_Address(target_address).as_bytes())) icmp_payload = Data() icmp_payload.set_data(icmp_bytes) #Link payload to header icmp_packet.contains(icmp_payload) return icmp_packet
def buildAnswer(self, in_onion): cmd = array_tobytes(in_onion[O_UDP_DATA].get_bytes()) if cmd[:4] == 'cmd:': cmd = cmd[4:].strip() print("Got command: %r" % cmd) if cmd == 'exit': from sys import exit exit() out_onion = OpenUDPResponder.buildAnswer(self, in_onion) out_onion.append(ImpactPacket.Data()) out_onion[O_UDP].contains(out_onion[O_UDP_DATA]) if cmd == 'who': out_onion[O_UDP_DATA].set_data(self.machine.fingerprint.get_id()) return out_onion
def __build_echo_message(class_object, type, id, sequence_number, arbitrary_data): #Build ICMP6 header icmp_packet = ICMP6() icmp_packet.set_type(type) icmp_packet.set_code(0) #Pack ICMP payload icmp_bytes = struct.pack('>H', id) icmp_bytes += struct.pack('>H', sequence_number) if (arbitrary_data is not None): icmp_bytes += array_tobytes(array.array('B', arbitrary_data)) icmp_payload = Data() icmp_payload.set_data(icmp_bytes) #Link payload to header icmp_packet.contains(icmp_payload) return icmp_packet
def from_ary(self, ary): return array_tobytes(ary)
def ary2n(self, ary, i=0): return struct.unpack(">H", array_tobytes(ary[i:i+2]))[0]
def get_packet(self): return array_tobytes(self.to_ary())
def get_switch_mac(self): return array_tobytes(self.get_bytes())[28:28+6]
def get_cluster_command_mac(self): return array_tobytes(self.get_bytes())[20:20+6]
def __init__(self, aBuffer = None): CDPElement.__init__(self, aBuffer) if aBuffer: data = array_tobytes(self.get_bytes())[8:] self._generateAddressDetails(data)
def get_ip_address(self, offset = 0, ip = None): if not ip: ip = array_tobytes(self.get_bytes())[offset : offset + IP_ADDRESS_LENGTH] return socket.inet_ntoa( ip )
def get_data(self): return array_tobytes(self.get_bytes())[4:self.get_length()]