5.7 KiB
5.7 KiB
Аудит пулов ключей и роутеров — полный свип
Класс задачи: «собери аудит всех роутеров и ключей где у нас авторег». Цель — единый верифицированный банк: сколько ключей нафармлено, сколько ЖИВЫХ прямо сейчас, какие роутеры/гейтвеи отвечают. Влад требует цифры с пруфами (alive/total по каждой панели), не «примерно».
Порядок
- Harvest из сессий Hermes. Каноническая база сессий —
C:/Users/User/AppData/Local/hermes/state.db(сотни MB; прочиеsessions.dbпусты — не трать время на table discovery по всем .db). Скрипт-харвестер:tmp/router_key_audit/harvest_sessions.py— regex-классы (openai/anthropic/ fireworks/groq/gemini/dashscope/newapi_sk/bearer/generic_long), вывод ТОЛЬКО маскированных примеров + контекст (какая сессия/панель). Сырые ключи в отчёт не печатать. - Live-чек роутеров/гейтвеев.
check_routers.py→ GET<base>/v1/models(локальные + удалённые). Интерпретация: 200 = жив и ключ валиден; 401 = роутер ЖИВ, нужен ключ (не считать мёртвым); connection refused/timeout = down (локальные гейтвеи между сессиями обычно не запущены — это статус, не поломка). - Агрегация банка с диска.
collect_bank.py: слить в единый банк с дедупом по(panel, api_key):tmp/regfarm/out/*.json— ВСЕ master_/out_ (волны w4/w5/big/mega — поля записей:panel,base,api_key,user_id,quota,ts)tmp/free_newapi_reg/POOL_FINAL*.csv,ALL_KEYS_*.csv- email-волны:
email_reg_results.json,email_accounts.jsonl,_*_keys.txt - прочие фермы: tokenharbor_keys.txt, miarouter accounts.jsonl, tk_keys.jsonl
(tooken), codex_relay accounts.jsonl (ключи в поле
api_key, sk-), rsiai_keys.json, firecrawl_keys_LIVE.txt
- Live-валидация банка.
validate_bank.py(ThreadPool 30-40):GET <base>/v1/modelsc заголовком, собранным конкатенацией ("Bea"+"rer "+key— write_file маскирует литералBearer, см. pitfall 20d). Считать alive только приstatus==200 AND len(data)>0— у панелей без группы токен даёт 200 с пустым списком моделей (см. newapi-relay-github-oauth-farm.md «Токен без группы»). - Ре-чек «мёртвых» ОБЯЗАТЕЛЕН (
recheck_bank.py) — см. pitfall ниже. - Отчёт: alive/total по каждой панели + список мёртвых с кодами ошибок
(403 CF-блок панели, 401 мёртвый/отозванный ключ, TLS-alert = панель банит
регион, timeout = панель down). Финал —
FINAL_AUDIT.json+ короткая сводка в TG: топ живых панелей цифрами, мёртвые одной строкой, итог «N проверенных живых ключей».
Pitfalls
- Обрезка тела ответа = ложные «мёртвые» ключи.
resp.read(60000)на/v1/modelsпанелей с сотнями моделей режет JSON → parse error → ключ помечен dead, хотя жив (прецедент: целая панель 42/42 «мёртвая» и вторая 18/18 — обе ожили на ре-чеке). Правило: читать тело ПОЛНОСТЬЮ (read(4_000_000)), и любой ключ, получивший HTTP 200, НЕ считать мёртвым из-за ошибки парсинга — помечать200-unparseableи ре-чекать отдельно. - Первый прогон валидатора — черновик. После масс-валидации прогони ре-чек всех не-alive с исправленным парсингом, прежде чем докладывать цифры Владу; расхождение «649 alive» vs «776 alive» по одному банку = недоверие.
- Bank-записи без
base(старые CSV/ручные дампы) не валидируемы — группировать отдельно как NOBASE, не смешивать с dead. _bud_keys.txt-подобные побочные файлы волны часто уже содержатся в master-записях банка — дедуп по (panel,key) их схлопнет; не считать их «новым уловом» без сверки.- Процессы волн не переживают рестарт агента — перед «перезапуском волны»
проверить живые python-процессы по cmdline; логи
_email_*.logс RESULT 0/N и пустойemail_accounts.jsonl= волна дала ноль, ключей в банке от неё нет.
Артефакты (переиспользовать, не писать заново)
tmp/router_key_audit/: harvest_sessions.py, check_routers.py, collect_bank.py,
validate_bank.py, recheck_bank.py, aggregate.py; данные: sessions_harvest.json,
routers_live.json, regfarm_bank.json, bank_validated_full.json, FINAL_AUDIT.json.