3 Script to generate a pcap file with n Map-Request packets with EID records
4 increasing sequentially and (optionally) another pcap file with n Map-Request
5 packets that have random EIDs
7 Use `./create_map_request_pcap.py --help` to see options
15 __author__ = "Lori Jakab"
16 __copyright__ = "Copyright (c) 2015, Cisco Systems, Inc."
17 __license__ = "New-style BSD"
18 __email__ = "lojakab@cisco.com"
22 def generate_eids_random(base, n):
23 """Generate n number of EIDs in random order starting from base
25 :param base: A string used as the first EID
26 :param n: An integer, number of EIDs to generate
28 :return : returns list containing string EIDs
32 eids.append(str(netaddr.IPAddress(base) +
33 random.randint(0, (n-1)*increment)))
37 def generate_eids_sequential(base, n):
38 """Generate n number of EIDs in sequential order starting from base
40 :param base: A string used as the first EID
41 :param n: An integer, number of EIDs to generate
43 :return : returns list containing string EIDs
47 eids.append(str(netaddr.IPAddress(base) + i*increment))
51 def generate_map_request(eid):
52 """Create a LISP Map-Request packet as a Scapy object
54 :param eid: A string used as the EID record
56 :return : returns a Scapy Map-Request packet object
58 sport1 = random.randint(60000, 65000)
59 sport2 = random.randint(60000, 65000)
60 rnonce = random.randint(0, 2**63)
62 itr_rloc = [lisp.LISP_AFI_Address(address=src_rloc, afi=1)]
63 record = [lisp.LISP_MapRequestRecord(request_address=eid,
67 packet = lisp.Ether(dst=dst_mac, src=src_mac)
68 packet /= lisp.IP(dst=dst_rloc, src=src_rloc)
69 packet /= lisp.UDP(sport=sport1, dport=4342)
70 packet /= lisp.LISP_Encapsulated_Control_Message(ptype=8)
71 packet /= lisp.IP(dst=eid, src=src_eid)
72 packet /= lisp.UDP(sport=sport2, dport=4342)
73 packet /= lisp.LISP_MapRequest(nonce=rnonce, request_afi=1,
74 address=src_eid, ptype=1,
75 itr_rloc_records=itr_rloc,
76 request_records=record)
79 parser = argparse.ArgumentParser(description='Create a Map-Request trace file')
81 parser.add_argument('--dst-mac', default='00:00:00:00:00:00',
82 help='Map-Request destination MAC address \
83 (default is 00:00:00:00:00:00)')
84 parser.add_argument('--src-mac', default='00:00:00:00:00:00',
85 help='Map-Request source MAC address \
86 (default is 00:00:00:00:00:00)')
87 parser.add_argument('--dst-rloc', default='127.0.0.1',
88 help='Send Map-Request to the Map-Server with this RLOC \
89 (default is 127.0.0.1)')
90 parser.add_argument('--src-rloc', default='127.0.0.1',
91 help='Send Map-Request with this source RLOC \
92 (default is 127.0.0.1)')
93 parser.add_argument('--src-eid', default='192.0.2.1',
94 help='Send Map-Request with this source EID \
95 (default is 192.0.2.1)')
96 parser.add_argument('--base-eid', default='10.0.0.0',
97 help='Start incrementing EID from this address \
98 (default is 10.0.0.0)')
99 parser.add_argument('--requests', type=int, default=1,
100 help='Number of requests to create (default 1)')
101 parser.add_argument('--increment', type=int, default=1,
102 help='Increment EID requests (default 1)')
103 parser.add_argument('--random', type=bool, default=False,
104 help='Create random EID requests (default False)')
106 in_args = parser.parse_args()
107 dst_mac = in_args.dst_mac
108 src_mac = in_args.src_mac
109 dst_rloc = in_args.dst_rloc
110 src_rloc = in_args.src_rloc
111 src_eid = in_args.src_eid
112 increment = in_args.increment
114 seq_eids = generate_eids_sequential(in_args.base_eid, in_args.requests)
118 seq_pkts.append(generate_map_request(eid))
120 lisp.wrpcap("encapsulated-map-requests-sequential.pcap", seq_pkts)
122 if in_args.random is True:
123 rand_eids = generate_eids_random(in_args.base_eid, in_args.requests)
126 for eid in rand_eids:
127 rand_pkts.append(generate_map_request(eid))
129 lisp.wrpcap("encapsulated-map-requests-random.pcap", rand_pkts)