Esempio n. 1
0
    def generate_stream(l2_encap, mac_src, mac_dst, l3_protocol, ip_src_addr,
                        ip_dst_addr, l3_length):
        ALLOWED_L3_PROTOCOL = {
            "ipv4": dpkt.ethernet.ETH_TYPE_IP,
            "ipv6": dpkt.ethernet.ETH_TYPE_IP6,
            "arp": dpkt.ethernet.ETH_TYPE_ARP
        }
        ALLOWED_L4_PROTOCOL = {
            "tcp": dpkt.ip.IP_PROTO_TCP,
            "udp": dpkt.ip.IP_PROTO_UDP,
            "icmp": dpkt.ip.IP_PROTO_ICMP,
            "icmpv6": dpkt.ip.IP_PROTO_ICMP6,
            "igmp": dpkt.ip.IP_PROTO_IGMP,
            "rtp": dpkt.ip.IP_PROTO_IRTP,
            "isis": dpkt.ip.IP_PROTO_ISIS,
            "ospf": dpkt.ip.IP_PROTO_OSPF
        }

        pkt_bld = CTRexPktBuilder()
        if l2_encap == "ethernet_ii":
            pkt_bld.add_pkt_layer("l2", dpkt.ethernet.Ethernet())
            # set Ethernet layer attributes
            pkt_bld.set_eth_layer_addr("l2", "src", mac_src)
            pkt_bld.set_eth_layer_addr("l2", "dst", mac_dst)
        else:
            raise NotImplementedError(
                "l2_encap does not support the desired encapsulation '{0}'".
                format(l2_encap))
        # set l3 on l2
        if l3_protocol not in ALLOWED_L3_PROTOCOL:
            raise ValueError(
                "l3_protocol must be one of the following: {0}".format(
                    ALLOWED_L3_PROTOCOL))
        pkt_bld.set_layer_attr("l2", "type", ALLOWED_L3_PROTOCOL[l3_protocol])

        # set l3 attributes
        if l3_protocol == "ipv4":
            pkt_bld.add_pkt_layer("l3", dpkt.ip.IP())
            pkt_bld.set_ip_layer_addr("l3", "src", ip_src_addr)
            pkt_bld.set_ip_layer_addr("l3", "dst", ip_dst_addr)
            pkt_bld.set_layer_attr("l3", "len", l3_length)
        else:
            raise NotImplementedError(
                "l3_protocol '{0}' is not supported by TRex yet.".format(
                    l3_protocol))

        pkt_bld.dump_pkt_to_pcap("stream_test.pcap")
        return pkt_bld
    def generate_stream(l2_encap, mac_src, mac_dst, l3_protocol, ip_src_addr, ip_dst_addr, l3_length):
        ALLOWED_L3_PROTOCOL = {
            "ipv4": dpkt.ethernet.ETH_TYPE_IP,
            "ipv6": dpkt.ethernet.ETH_TYPE_IP6,
            "arp": dpkt.ethernet.ETH_TYPE_ARP,
        }
        ALLOWED_L4_PROTOCOL = {
            "tcp": dpkt.ip.IP_PROTO_TCP,
            "udp": dpkt.ip.IP_PROTO_UDP,
            "icmp": dpkt.ip.IP_PROTO_ICMP,
            "icmpv6": dpkt.ip.IP_PROTO_ICMP6,
            "igmp": dpkt.ip.IP_PROTO_IGMP,
            "rtp": dpkt.ip.IP_PROTO_IRTP,
            "isis": dpkt.ip.IP_PROTO_ISIS,
            "ospf": dpkt.ip.IP_PROTO_OSPF,
        }

        pkt_bld = CTRexPktBuilder()
        if l2_encap == "ethernet_ii":
            pkt_bld.add_pkt_layer("l2", dpkt.ethernet.Ethernet())
            # set Ethernet layer attributes
            pkt_bld.set_eth_layer_addr("l2", "src", mac_src)
            pkt_bld.set_eth_layer_addr("l2", "dst", mac_dst)
        else:
            raise NotImplementedError("l2_encap does not support the desired encapsulation '{0}'".format(l2_encap))
        # set l3 on l2
        if l3_protocol not in ALLOWED_L3_PROTOCOL:
            raise ValueError("l3_protocol must be one of the following: {0}".format(ALLOWED_L3_PROTOCOL))
        pkt_bld.set_layer_attr("l2", "type", ALLOWED_L3_PROTOCOL[l3_protocol])

        # set l3 attributes
        if l3_protocol == "ipv4":
            pkt_bld.add_pkt_layer("l3", dpkt.ip.IP())
            pkt_bld.set_ip_layer_addr("l3", "src", ip_src_addr)
            pkt_bld.set_ip_layer_addr("l3", "dst", ip_dst_addr)
            pkt_bld.set_layer_attr("l3", "len", l3_length)
        else:
            raise NotImplementedError("l3_protocol '{0}' is not supported by TRex yet.".format(l3_protocol))

        pkt_bld.dump_pkt_to_pcap("stream_test.pcap")
        return pkt_bld