def create_vxlan_packet(self, outer_da, outer_sa, outer_dip, outer_sip, vni, inner_da, inner_dip, inner_sa="00:11:22:33:55:66", inner_sip="192.168.0.44", is_inner_vlan=False, vlan_id=1): out_ether = scapy.Ether(dst=outer_da, src=outer_sa) out_ip = scapy.IP(dst=outer_dip, src=outer_sip) out_udp = scapy.UDP(dport=4789, sport=random.randint( 49152, 65535 - NUM_CONTINUOUS_PKT_COUNT)) vxlan = scapy.VXLAN(vni=vni) ether = scapy.Ether(dst=inner_da, src=inner_sa) dot1q = scapy.Dot1Q(vlan=vlan_id) ip = scapy.IP(dst=inner_dip, src=inner_sip) udp = scapy.UDP(dport=22222, sport=11111) # minimum packet for untagged payload = "\0" * (64 - 4 - len(ether / ip / udp)) packet_vxlan = out_ether / out_ip / out_udp / vxlan / ether / ip / udp / payload if is_inner_vlan: packet_inner = ether / dot1q / ip / udp / payload else: packet_inner = ether / ip / udp / payload return packet_vxlan, packet_inner
def simple_nvgrev6_packet(self, pktlen=300, eth_dst='00:01:02:03:04:05', eth_src='00:06:07:08:09:0a', dl_vlan_enable=False, vlan_vid=0, vlan_pcp=0, dl_vlan_cfi=0, ipv6_src='1::2', ipv6_dst='3::4', ipv6_fl=0, ipv6_tc=0, ipv6_ecn=None, ipv6_dscp=None, ipv6_hlim=64, nvgre_version=0, nvgre_tni=None, nvgre_flowid=0, inner_frame=None): ''' @summary: Helper function to construct an IPv6 NVGRE packet ''' if scapy.NVGRE is None: logging.error( "A NVGRE packet was requested but NVGRE is not supported by your Scapy. See README for more information" ) return None if MINSIZE > pktlen: pktlen = MINSIZE nvgre_hdr = scapy.NVGRE(vsid=nvgre_tni, flowid=nvgre_flowid) if (dl_vlan_enable): pkt = scapy.Ether(dst=eth_dst, src=eth_src)/ \ scapy.Dot1Q(prio=vlan_pcp, id=dl_vlan_cfi, vlan=vlan_vid)/ \ scapy.IPv6(src=ipv6_src, dst=ipv6_dst, fl=ipv6_fl, tc=ipv6_tc, hlim=ipv6_hlim, nh=47)/ \ nvgre_hdr else: pkt = scapy.Ether(dst=eth_dst, src=eth_src)/ \ scapy.IPv6(src=ipv6_src, dst=ipv6_dst, fl=ipv6_fl, tc=ipv6_tc, hlim=ipv6_hlim, nh=47)/ \ nvgre_hdr if inner_frame: pkt = pkt / inner_frame else: pkt = pkt / scapy.IP() pkt = pkt / ("D" * (pktlen - len(pkt))) return pkt
def simple_eth_packet(pktlen=60, eth_dst="00:01:02:03:04:05", eth_src="00:06:07:08:09:0a", vlan_vid=0, vlan_pcp=0): pkt = scapy.Ether(dst=eth_dst, src=eth_src) if vlan_vid or vlan_pcp: pktlen += 4 pkt /= scapy.Dot1Q(vlan=vlan_vid, prio=vlan_pcp) pkt[scapy.Dot1Q:1].type = DEFAULT_FDB_ETHERNET_TYPE else: pkt.type = DEFAULT_FDB_ETHERNET_TYPE pkt = pkt / ("0" * (pktlen - len(pkt))) return pkt