示例#1
0
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