import time
from playwright.sync_api import sync_playwright
# === НАСТРОЙКИ ===
URL = "http://192.168.1" # Укажите адрес вашей панели управления
USERNAME = "admin"
PASSWORD_FILE = "passwords.txt"
# Замените эти селекторы на актуальные для вашей формы входа
SELECTOR_LOGIN_INPUT = 'input[name="login"]'
SELECTOR_PASSWORD_INPUT = 'input[name="password"]'
SELECTOR_SUBMIT_BUTTON = 'button[type="submit"]'
def test_passwords():
with sync_playwright() as p:
# headless=False открывает окно браузера. Измените на True, когда все настроите,
# чтобы скрипт работал в фоне и намного быстрее.
browser = p.chromium.launch(headless=False)
page = browser.new_page()
try:
with open(PASSWORD_FILE, "r", encoding="utf-8") as f:
for line in f:
password = line.strip()
if not password:
continue
print(f"[*] Проверяем пароль: {password}")
# Открываем страницу заново для генерации новой соли/токена
page.goto(URL)
page.wait_for_selector(SELECTOR_LOGIN_INPUT)
# Заполняем форму
page.fill(SELECTOR_LOGIN_INPUT, USERNAME)
page.fill(SELECTOR_PASSWORD_INPUT, password)
# Ожидаем сетевой ответ от сервера в момент клика по кнопке
with page.expect_response("**/login*") as response_info:
page.click(SELECTOR_SUBMIT_BUTTON)
response = response_info.value
# Проверка статуса ответа
if response.status == 401:
print("[-] Пароль не подошел (Сервер вернул 401 Unauthorized)")
continue
# Если статус не 401 (например, 200 OK или 302 Redirect) — вход успешен
print(
f"\n[+] УСПЕХ! Правильный пароль: {password}"
)
print(f"[+] Статус ответа сервера: {response.status}")
break
except FileNotFoundError:
print(f"[!] Файл {PASSWORD_FILE} не найден.")
finally:
browser.close()
if __name__ == "__main__":
test_passwords()