Ejemplo n.º 1
0
        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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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