def generate_map_request(eid): """Create a LISP Map-Request packet as a Scapy object Args: :param eid: A string used as the EID record Returns: :return : returns a Scapy Map-Request packet object """ sport1 = random.randint(60000, 65000) sport2 = random.randint(60000, 65000) rnonce = random.randint(0, 2**63) itr_rloc = [lisp.LISP_AFI_Address(address=src_rloc, afi=1)] record = [ lisp.LISP_MapRequestRecord(request_address=eid, request_afi=1, eid_mask_len=32) ] packet = lisp.Ether(dst=dst_mac, src=src_mac) packet /= lisp.IP(dst=dst_rloc, src=src_rloc) packet /= lisp.UDP(sport=sport1, dport=4342) packet /= lisp.LISP_Encapsulated_Control_Message(ptype=8) packet /= lisp.IP(dst=eid, src=src_eid) packet /= lisp.UDP(sport=sport2, dport=4342) packet /= lisp.LISP_MapRequest(nonce=rnonce, request_afi=1, address=src_eid, ptype=1, itr_rloc_records=itr_rloc, request_records=record) return packet
def generate_map_register(eid, rloc, key_id): """Create a LISP Map-Register packet as a Scapy object Args: :param eid: A string used as the EID record :param rloc: A string used as the RLOC :param key_id: Integer value specifying the authentication type Returns: :return : returns a Scapy Map-Request packet object """ sport1 = random.randint(60000, 65000) rnonce = random.randint(0, 2 ** 63) rlocs = [ lisp.LISP_Locator_Record( priority=1, weight=1, multicast_priority=255, multicast_weight=0, reserved=0, locator_flags=5, locator_afi=1, address=rloc, ) ] record = [ lisp.LISP_MapRecord( record_ttl=1440, locator_count=1, eid_prefix_length=32, action=0, authoritative=1, reserved=0, map_version_number=0, record_afi=1, record_address=eid, locators=rlocs, ) ] packet = lisp.Ether(dst=dst_mac, src=src_mac) packet /= lisp.IP(dst=dst_rloc, src=src_rloc) packet /= lisp.UDP(sport=sport1, dport=4342) packet /= lisp.LISP_MapRegister( ptype=3, nonce=rnonce, register_flags=10, additional_register_flags=1, register_count=1, key_id=key_id, register_records=record, xtr_id_low=netaddr.IPAddress(eid), ) return packet