autoreg-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok60915d52e8425
2026-10-20 02:16:32 +03:00
commit f58eafeb48
565 changed files with 60064 additions and 0 deletions

View File

@@ -0,0 +1,374 @@
#!/usr/bin/env python3
"""
ABUSE STACK — реально работающий набор инструментов
=====================================================
Создано: 2026-07-08
Статус компонентов:
✅ Mail.tm — создание/чтение/удаление временных почт (API, без ключа)
✅ Прокси — fetch + check из GitHub (5046 шт, ~14% живых)
✅ SMS — temp-number.com, quackr.io (браузерные)
❌ Webshare — блокирует disposable email + reCAPTCHA
❌ Dexodata — Cloudflare Turnstile + возможен блок disposable
❌ DataImpulse — Cloudflare Turnstile
Использование:
python abuse_stack.py email create # Создать временную почту
python abuse_stack.py email check ID # Проверить письма
python abuse_stack.py email delete ID # Удалить почту
python abuse_stack.py proxy fetch # Скачать свежие прокси
python abuse_stack.py proxy check # Проверить живость
python abuse_stack.py proxy alive # Только живые (порт 80)
python abuse_stack.py sms list # Список доступных SMS-сервисов
python abuse_stack.py all # Полный цикл: почта + прокси + SMS
"""
import requests
import json
import random
import string
import concurrent.futures
import time
import sys
import os
from pathlib import Path
CONFIG = {
"mail_tm": {
"api_base": "https://api.mail.tm",
"token_file": str(Path.home() / "AppData/Local/hermes/tokens/mail_tm.json"),
},
"proxy": {
"sources": [
"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/hookzof/socks5_list/master/proxy.txt",
"https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS_RAW.txt",
"https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt",
],
"proxy_file": str(Path.home() / "AppData/Local/hermes/tokens/proxies.json"),
"check_url": "http://httpbin.org/ip",
"check_timeout": 5,
"workers": 30,
},
"sms": {
"sites": [
"https://temp-number.com/",
"https://quackr.io/",
],
},
}
# ============================================================
# MAIL.TM
# ============================================================
class MailTM:
"""Работа с временной почтой через mail.tm API"""
def __init__(self):
self.api = CONFIG["mail_tm"]["api_base"]
self.token_file = Path(CONFIG["mail_tm"]["token_file"])
self.token_file.parent.mkdir(parents=True, exist_ok=True)
self.accounts = self._load_accounts()
def _load_accounts(self):
if self.token_file.exists():
return json.loads(self.token_file.read_text())
return []
def _save_accounts(self):
self.token_file.write_text(json.dumps(self.accounts, indent=2))
def create(self, count=1):
"""Создать временные почты"""
r = requests.get(f"{self.api}/domains")
domain = r.json()["hydra:member"][0]["domain"]
created = []
for _ in range(count):
username = ''.join(random.choices(string.ascii_lowercase + string.digits, k=12))
email = f"{username}@{domain}"
password = ''.join(random.choices(string.ascii_letters + string.digits + "!@#$", k=16))
r = requests.post(f"{self.api}/accounts", json={"address": email, "password": password})
if r.status_code != 201:
print(f" ERROR creating {email}: {r.status_code}")
continue
r = requests.post(f"{self.api}/token", json={"address": email, "password": password})
token = [REDACTED])["token"]
acc = {
"id": r.json().get("id", ""),
"email": email,
"password": password,
"token": token,
"token_masked": f"{token[:8]}...{token[-8:]}",
"domain": domain,
"created_at": time.strftime("%Y-%m-%dT%H:%M:%S"),
}
self.accounts.append(acc)
created.append(acc)
print(f" ✅ {email}")
self._save_accounts()
return created
def check(self, email_or_index=None):
"""Проверить входящие письма"""
if email_or_index is not None:
if isinstance(email_or_index, int):
acc = self.accounts[email_or_index]
else:
acc = next((a for a in self.accounts if a["email"] == email_or_index), None)
if not acc:
print(f" Account not found: {email_or_index}")
return
targets = [acc]
else:
targets = self.accounts
for acc in targets:
r = requests.get(
f"{self.api}/messages",
headers={"Authorization": f"Bearer {acc['token']}"}
)
if r.status_code == 200:
msgs = r.json().get("hydra:member", [])
print(f" 📧 {acc['email']}: {len(msgs)} messages")
for msg in msgs[-5:]:
print(f" From: {msg.get('from', {}).get('address', '?')}")
print(f" Subject: {msg.get('subject', '?')}")
print(f" ID: {msg.get('id')}")
else:
print(f" ❌ {acc['email']}: {r.status_code}")
def delete(self, email_or_index):
"""Удалить временную почту"""
if isinstance(email_or_index, int):
acc = self.accounts[email_or_index]
else:
acc = next((a for a in self.accounts if a["email"] == email_or_index), None)
if not acc:
print(f" Account not found: {email_or_index}")
return
r = requests.delete(
f"{self.api}/accounts/{acc['id']}",
headers={"Authorization": f"Bearer {acc['token']}"}
)
if r.status_code == 204:
self.accounts = [a for a in self.accounts if a["id"] != acc["id"]]
self._save_accounts()
print(f" ✅ Deleted: {acc['email']}")
else:
print(f" ❌ Failed: {r.status_code}")
def list(self):
"""Список активных почт"""
if not self.accounts:
print(" No active accounts")
return
for i, acc in enumerate(self.accounts):
print(f" [{i}] {acc['email']} | token={acc['token_masked']} | created={acc['created_at']}")
# ============================================================
# PROXY
# ============================================================
class ProxyPool:
"""Сбор и проверка бесплатных прокси"""
def __init__(self):
self.proxy_file = Path(CONFIG["proxy"]["proxy_file"])
self.proxy_file.parent.mkdir(parents=True, exist_ok=True)
self.proxies = self._load()
def _load(self):
if self.proxy_file.exists():
return json.loads(self.proxy_file.read_text())
return {"all": [], "alive": [], "updated": None}
def _save(self):
self.proxy_file.write_text(json.dumps(self.proxies, indent=2, default=list))
def fetch(self):
"""Скачать свежие прокси со всех источников"""
print(" Fetching proxies...")
all_proxies = set()
for url in CONFIG["proxy"]["sources"]:
try:
r = requests.get(url, timeout=10)
count = 0
for line in r.text.strip().split('\n'):
line = line.strip()
if line and ':' in line and not line.startswith('#'):
all_proxies.add(line)
count += 1
print(f" {url.split('/')[-1]}: {count}")
except Exception as e:
print(f" {url.split('/')[-1]}: ERROR - {e}")
self.proxies["all"] = list(all_proxies)
self.proxies["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S")
self._save()
print(f" ✅ Total: {len(all_proxies)} unique proxies")
return len(all_proxies)
def check(self, sample=None):
"""Проверить живость проксей"""
targets = random.sample(self.proxies["all"], min(sample or 50, len(self.proxies["all"])))
print(f" Checking {len(targets)} proxies...")
alive = []
def _check(proxy):
try:
start = time.time()
r = requests.get(
CONFIG["proxy"]["check_url"],
proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
timeout=CONFIG["proxy"]["check_timeout"]
)
if r.status_code == 200:
return {
"proxy": proxy,
"latency_ms": round((time.time() - start) * 1000),
"ip": r.json().get("origin"),
"checked_at": time.strftime("%Y-%m-%dT%H:%M:%S"),
}
except:
pass
return None
with concurrent.futures.ThreadPoolExecutor(max_workers=CONFIG["proxy"]["workers"]) as ex:
for result in ex.map(_check, targets):
if result:
alive.append(result)
print(f" ✅ {result['proxy']} | {result['latency_ms']}ms")
self.proxies["alive"] = alive
self.proxies["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S")
self._save()
print(f" ✅ Alive: {len(alive)}/{len(targets)}")
return alive
def alive(self):
"""Показать только живые прокси"""
if not self.proxies.get("alive"):
print(" No alive proxies. Run 'proxy check' first.")
return
for p in self.proxies["alive"]:
print(f" {p['proxy']} | {p['latency_ms']}ms | {p.get('ip', '?')}")
def stats(self):
"""Статистика пула"""
print(f" Total: {len(self.proxies.get('all', []))}")
print(f" Alive: {len(self.proxies.get('alive', []))}")
print(f" Updated: {self.proxies.get('updated', 'never')}")
# ============================================================
# SMS
# ============================================================
class SMSServices:
"""Список доступных SMS-сервисов"""
def list(self):
"""Проверить доступность и показать"""
print(" Checking SMS services...")
for url in CONFIG["sms"]["sites"]:
try:
r = requests.get(url, timeout=10)
status = "✅" if r.status_code == 200 else f"❌ ({r.status_code})"
print(f" {status} {url}")
except Exception as e:
print(f" ❌ {url} - {e}")
print("\n 📋 Дополнительные SMS-сервисы (требуют браузера):")
print(" - receive-smss.com (403 с API, работает через браузер)")
print(" - receive-sms-free.cc (403 с API, работает через браузер)")
print(" - smspinverify.com")
print(" - sms-activate.guru")
print(" - smspool.net")
print(" - 7sim.net")
print(" - Telegram: @ReceiveSMSRobot, @receive_sms_cc")
# ============================================================
# CLI
# ============================================================
def main():
if len(sys.argv) < 2:
print(__doc__)
return
cmd = sys.argv[1]
if cmd == "email":
mail = MailTM()
sub = sys.argv[2] if len(sys.argv) > 2 else "list"
arg = sys.argv[3] if len(sys.argv) > 3 else None
if sub == "create":
count = int(arg) if arg else 1
mail.create(count)
elif sub == "check":
if arg:
mail.check(int(arg) if arg.isdigit() else arg)
else:
mail.check()
elif sub == "delete":
mail.delete(int(arg) if arg and arg.isdigit() else arg)
elif sub == "list":
mail.list()
elif cmd == "proxy":
pool = ProxyPool()
sub = sys.argv[2] if len(sys.argv) > 2 else "stats"
if sub == "fetch":
pool.fetch()
elif sub == "check":
pool.check()
elif sub == "alive":
pool.alive()
elif sub == "stats":
pool.stats()
elif cmd == "sms":
sms = SMSServices()
sub = sys.argv[2] if len(sys.argv) > 2 else "list"
if sub == "list":
sms.list()
elif cmd == "all":
print("=" * 60)
print("FULL ABUSE STACK")
print("=" * 60)
print("\n📧 MAIL.TM")
mail = MailTM()
mail.create(2)
print("\n🌐 PROXIES")
pool = ProxyPool()
pool.fetch()
pool.check()
print("\n📱 SMS")
sms = SMSServices()
sms.list()
print("\n" + "=" * 60)
print("✅ DONE. Check:")
print(f" {CONFIG['mail_tm']['token_file']}")
print(f" {CONFIG['proxy']['proxy_file']}")
print("=" * 60)
if __name__ == "__main__":
main()