Files

237 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: ai-freebie-scanner
description: Multi-source AI freebie/API scanner v3 — scrapes 19 sources (forums, GitHub awesome-lists, HN, blogs, leak trackers, free API gateways) for free AI API keys and access. Deploys to 2 DO servers (SGP + NYC) with cron. Delivers findings to Telegram in @ikhdev1 style (emoji → title → что получаем → ссылка → хештеги).
category: automation
tags:
- ai
- scraping
- free
- api
- telegram
- digitalocean
- cron
triggers:
- AI халява
- бесплатные API ключи
- free AI API
- парсинг форумов AI
- AI abuse scanner
- халявный доступ
- nodeloc куки
- linux.do парсинг
- ии абузы
- ai freebie
references:
- references/scanner-v2-architecture.md
- references/nodeloc-cookie-format.md
- references/tg-mainsession-chats.md
- references/post-format-ikhdev1.md
- references/ru-free-ai-video-triage.md
- references/deep-research-fanout-verification.md
---
# AI Freebie Scanner v3
Парсит 19 источников на предмет бесплатных AI API ключей, доступов, jailbreak'ов.
Работает на 2 DO серверах (SGP + NYC) + локально (Windows).
Доставляет находки в Telegram @[REDACTED-NAME] в стиле @ikhdev1.
**Видео-триаж:** когда Влад кидает RU YouTube-видео "топовые модели БЕСПЛАТНО" и просит "сделай бесплатно" — см. `references/ru-free-ai-video-triage.md` (yt-dlp VTT-извлечение транскрипта, деконструкция метода, политика: не писать client-side обход премиума, предложить легальные альтернативы).
## Архитектура
Скрипт: `C:\Users\User\ai-abuse-scanner\scanner.py` (508 строк)
Сервер: `/root/ai_scanner.py` на обоих дроплетах
Технологии: `aiohttp` + `BeautifulSoup` + `lxml`. Асинхронный параллельный сбор через `asyncio.gather`.
## Источники (v3 — 19 источников)
| Статус | Источник | URL/Метод | Тип |
|--------|----------|-----------|-----|
| 🟢 | NodeLoc | `/tag/ai`, `/tag/羊毛党`, `/tag/推广` | Форум (куки) |
| 🟢 | Lolz.live | `/forums/86/`, `/forums/54/` | Форум |
| 🟢 | Hacker News | `hn.algolia.com/api/v1/search` | JSON API |
| 🟢 | GitHub Search | `github.com/search?q=...+type=repositories` | HTML |
| 🟢 | GitHub awesome-lists | zukixa/cool-ai-stuff, cheahjs/free-llm-api-resources, zebbern/no-cost-ai, ShaikhWarsi/free-ai-tools | Raw README |
| 🟢 | DuckDuckGo | `html.duckduckgo.com/html` | HTML поиск |
| 🟢 | AIMLAPI | `aimlapi.com/best-ai-apis-for-free` | Статический блог |
| 🟢 | GetAIperks | `getaiperks.com/...40-free-ai-api-keys...` | Статический гайд |
| 🟢 | TowardsAI | `pub.towardsai.net/free-ai-apis-2026...` | Статья |
| 🟢 | Coderfile | `coderfile.io/blog/free-apis-developers-2026` | Блог |
| 🟢 | daily.dev | `daily.dev/posts/...` | Статья |
| 🟢 | BazaarLink | `bazaarlink.ai/free` | Free API key |
| 🟢 | Api.Airforce | `api.airforce/` | 100+ free models |
| 🟢 | Ofox.ai | `ofox.ai/blog/free-llm-api-tiers...` | Блог |
| 🟢 | OpenRouter | `openrouter.ai/blog/...free-llm-apis-compared` | Блог |
| 🟢 | KeyLeaks | `ai-keys-leaks.begimher.com` | Трекер утечек (работает с серверов!) |
| 🟢 | v2ex | `www.v2ex.com/api/topics/show.json?node_name={ai,python,cloudflare,vps}` | JSON API (public, stdlib-only friendly) |
| 🟡 | Linux.do | через `r.jina.ai/https://linux.do/...` (включая .json-ленты: latest.json, c/welfare/34.json, tag/api) | Форум (CF обходится jina-ридером) |
| 🟡 | Reddit | `api.pullpush.io/reddit/search/submission/?ids=<id>` (~1 req/20s) | JSON API (direct/old.reddit/jina — все блокированы) |
| 🟢 | KeyLeaks | `ai-keys-leaks.begimher.com` | Трекер утечек (работает с серверов!) |
**Примечания:**
- Linux.do и Reddit блокируют datacenter IP через Cloudflare — нужен headless браузер или жилые прокси. Даже Playwright получает CF Challenge ("Один момент...").
- KeyLeaks (435K+ утекших AI ключей) работает только с серверных IP (локально DNS таймаут).
- GitHub awesome-lists — самый жирный источник (до 180+ URL за прогон).
- HN Algolia API — самый быстрый и надежный (JSON, без HTML-парсинга).
- Блог-источники проверяются разово (по статическому ключу в стейте).
- NodeLoc дает 30 тем со страницы AI-тегов, Lolz требует правильных селекторов (`.structItem`, не `.structItem--thread`).
## Quality Scoring (v3.1 — новая фича)
Функция `quality_score(item) → int` оценивает каждую находку от 1 до 10:
- **Прямой источник (+3-4):** NodeLoc, Lolz, KeyLeaks, BazaarLink, Airforce
- **Модель/провайдер (+1):** claude, gpt-4, deepseek, glm, nvidia...
- **Инструкции (+1):** register, signup, claim, setup, endpoint, url:
- **Ключи/токены (+1):** api key, apikey, token, credits, $, credit
- **Абуз/jailbreak (+2):** jailbreak, bypass, reverse, exploit, hack
- **Детальный сниппет (+2-3):** длина >50 или >150 символов
Топ-15 по score попадают в Telegram. Остальные отсекаются. Это убирает шум из GitHub-списков (где много ссылок без контекста).
## Формат постов (@ikhdev1 стиль)
```html
🔥 AI ABUZ DIGEST
✅ 🎮 <b>Название сервиса</b>
<b>Что получаем:</b>
• пункт 1
• пункт 2
• пункт 3
🌐 <a href="url">Открыть</a> <i>Источник</i>
#халява #api #claude #gpt #бесплатно
— — —
AI Scanner v3 | 15 тем | @[REDACTED-NAME]
```
**Статусы по score:**
- ✅ score ≥ 8 — проверенные/жирные источники
- 🆕 score ≥ 5 — новые находки
- ⚠️ score < 5 — непроверенные
**КРИТИЧЕСКИ: HTML escaping.** ВСЁ проходит через `safe_html()`:
- `&` → `&amp;`, `<` → `&lt;`, `>` → `&gt;`, `"` → `&quot;`
- Контрольные символы (<32) заменяются на пробел
- Telegram отклоняет сообщения с `"Unclosed start tag"` если где-то не экранирован `<`
- Ссылки в href двойных кавычках: `<a href="url">` (не одиночных — ломается при наличии `'` в URL)
## Сервера (DO)
| Сервер | IP | Регион | Ресурсы | SSH Key | Статус |
|--------|-----|--------|---------|---------|--------|
| gothbreach-abuse-1 | [REDACTED-IP] | SGP | 8GB/2vCPU/160GB | do_access | ✅ Cron 15min + KH8 |
| eni-nyc1 | [REDACTED-IP] | NYC | 4GB/2vCPU/80GB | do_access | ✅ Cron 15min + KH8 |
| eni-sgp1 | [REDACTED-IP] | SGP | 1GB/2vCPU/160GB | do_gothbreach | ✅ Cron 15min + KH8 |
| Alibaba ECS | [REDACTED-IP] | ap-southeast-1 | 16GB/8vCPU/99GB | sdas.pem (LOST) | ❌ offline |
**⚠️ SSH key per-server (2026-07-04):** eni-sgp1 uses `do_gothbreach` key, NOT `do_access`. Using do_access → "Permission denied (publickey)". Always check which key works: `for k in do_access do_gothbreach eni_key; do ssh -i ~/.ssh/$k root@IP hostname; done`.
**⚠️ eni-nyc1 may be OFF (2026-07-04):** If SSH times out, the droplet is powered off. Power on via DO API:
```bash
curl -X POST -H "Authorization: Bearer dop_v1_..." \
"https://api.digitalocean.com/v2/droplets/581420317/actions" \
-d '{"type":"power_on"}'
# Wait 30s, then SSH works. Droplet IDs: gothbreach=580095930, nyc1=581420317, sgp1=581892235.
```
SSH: `ssh -i ~/.ssh/do_access -o ControlMaster=no -o ControlPath=none -o StrictHostKeyChecking=no root@<IP>`
**Deploy на оба сервера одной командой:**
```bash
cat scanner.py | ssh root@[REDACTED-IP] "cat > /root/ai_scanner.py"
cat scanner.py | ssh root@[REDACTED-IP] "cat > /root/ai_scanner.py"
```
**Cross-server pipe transfer (2026-07-04):** When target server can't SSH to source (key mismatch), pipe through local machine:
```bash
ssh root@SOURCE "cat /root/kh8.py" | ssh root@TARGET "cat > /root/kh8.py"
```
This works even when TARGET has no SSH access to SOURCE. Use for deploying KH8/scanner from gothbreach-abuse-1 to other droplets.
**⚠️ ControlMaster socket corruption:** After multiple rapid SSH calls, `mux_client_request_session: read from master failed`. Fix: `rm -f ~/.ssh/cm-root@*` + always use `-o ControlMaster=no -o ControlPath=none` for one-shot commands.
**Cron:**
```bash
echo '*/15 * * * * cd /root && python3 ai_scanner.py >> /root/ai_scanner_cron.log 2>&1' | crontab -
```
## NodeLoc куки
Нужны 5 куки. Формат в `scanner.py` → `NODELOC_COOKIES`:
- `_forum_session` — основная (httpOnly, secure)
- `_t` — долгоживущий токен (httpOnly, secure)
- `__stripe_mid` + `__stripe_sid` — Stripe
- `_bypass_cache` — `true`
Куки протухают. Актуальный набор всегда в коде сканера.
## Дедупликация
MD5 от URL → `seen_v3.json`. Лимит 10000 хешей. Первый запуск на новом месте даёт 185-238 находок, последующие — только свежие.
## TG Mainsession Scanner
Парсинг чатов @[REDACTED-NAME] через maintg MCP. Cron-job `400504e7dc83`, каждые 10 мин.
maintg credentials: API_ID=2040, API_HASH=[REDACTED-KEY]
Session: `C:\Users\User\.hermes\mcp-servers\session_string.txt`
Аккаунт: @dirgigh ([REDACTED-TGID]), видит диалоги @[REDACTED-NAME]
## NodeLoc/v2ex без куки (проверено 2026-09-25)
**NodeLoc куки НЕ обязательны для публичных лент:** `https://www.nodeloc.com/latest.json?order=created` и `https://www.nodeloc.com/top.json?period=weekly` отдают полные Discourse JSON (30 топиков) без авторизации — нужен только заголовок `Accept-Encoding: gzip` + ручная gunzip-обработка (иначе тело выглядит пустым, хотя HTTP 200; `size_download 0` без `--compressed` — это gzip, а не блок). Раздел «Питфолы» п.5 про протухающие куки относится только к tag-страницам и приватным разделам.
**CN-ключевые слова ОБЯЗАТЕЛЬНЫ для фильтрации NodeLoc/v2ex/hostloc:** русско-английский список (абуз/free/триал/бонус…) дал 0 находок на 30 свежих топиках; добавление CN-ключей дало 31. Рабочий набор: `福利, 免费, 白嫖, 薅羊毛, 优惠, 折扣, 抽奖, 送, 领取, 红包, 活动, 羊毛`. Скрипт-эталон: `C:/Users/User/tmp/abuse_scrape.py` (stdlib-only, urllib+gzip, JSONL-вывод в `tmp/abuse_forums_scrape.jsonl`).
**Статус источников на 2026-09-25 (curl, локальный IP):**
- v2ex `api/topics/hot.json` — 200, работает без ключей
- lolz.live/lolz.guru — Cloudflare с локального IP (тело 370 байт), нужен Firecrawl/прокси; zelenka.guru 000 без browser UA, 200 с полным Chrome UA
- hostloc.com fid=45 — страница отдаётся (11KB), но стандартный Discuz-regex `class="s xst"` не матчит — верстка другая, селекторы пересобрать
- findaicredits.com — 200, простой HTML, парсится regex'ом по внешним ссылкам (агрегатор AI-кредитов, свежак ежедневно)
- linux.do — 403 (CF) с локального IP; xakfor.net — JS-loader (200, контента нет без браузера)
**Свежие примеры находок (nodeloc, 2026-09-25):** Luna $3000 free (t/110131), GPT-6 Luna 5B tokens (t/110672), Kimi K3 go-plan ×50 (t/110679), GLM 5.3 Flash 500M tokens (t/110393), Huawei Cloud 10M tokens/day forever (t/110774), Devin Cloud unlimited SWE-2 (t/110126), OpenXLab register-farm (t/110021).
## Deep research mode (fan-out субагентов + verification ladder)
Для задач «найди новые абузы/цели для авторега» — полный плейбук в `references/deep-research-fanout-verification.md`: 6 параллельных delegate_task по источникам (nodeloc/v2ex Discourse .json, GitHub search API, FMHY/paste-ленты, linux.do через r.jina.ai, локальный findings.jsonl, reddit/pullpush+web_search), затем ОБЯЗАТЕЛЬНАЯ верификация каждого кандидата curl-лестницей: root 200 → /v1/models без ключа → /v1/chat/completions без ключа (только chat-200 = truly keyless; models-200 + chat-401 = нужна рега) → signup-probe с same-origin заголовками (Origin/Referer/Sec-Fetch — без них SPA отдаёт ложный 403 «didn't come from this site», маскирующий реальный статус). Мета-источники: GitHub welfare-навигаторы (wynx1123/ai-welfare-hub, minshurui/ai-api-gongyi-nav, Danjack85/xusuo-switch, nejib1/Free-LLM с daily auto-sync) — по 40-90 доменов панелей на репо.
## Питфолы
1. **HTML entities = instant fail** — всегда `safe_html()` для ВСЕХ полей. Ошибка `"Unclosed start tag"` = где-то не экранирован `<` или `&`.
2. **Linux.do CF Challenge** — прямой curl даёт 403; РАБОТАЕТ ридер `https://r.jina.ai/<linux.do-url>` (включая Discourse .json-ленты и тела тредов). Пауза 3-5с между jina-запросами.
3. **Reddit 403** — direct, old.reddit .json, jina и redlib все блокируются. Рабочий путь: `api.pullpush.io/reddit/search/submission/?ids=<thread_id>` — полный текст треда по ID, rate-limit ~1 req/20s. ID тредов брать из web_search-выдачи.
3b. **GitHub search API без токена = 10 req/мин** (не 10/час; 10/час — старый лимит, core API 60/час). Паузы между search-запросами, README читать через raw.githubusercontent.com (не лимитит search).
4. **KeyLeaks DNS** — локально не резолвится (таимаут), с серверов работает.
5. **NodeLoc куки протухают** — `_forum_session` живёт недолго. Обновлять из браузера.
6. **GitHub rate limit** — 10 req/hr без токена. С токеном 5000/hr.
7. **ControlMaster SSH** — всегда `-o ControlMaster=no -o ControlPath=none` при подключении. иначе ошибка "mux_client_request_session: read from master failed".
8. **v2ex node `ai` может не существовать** — API отдаёт 404. Рабочие ноды: `python`, `cloudflare`, `vps`. Форум-сканер v6 авто-пропускает пустые/404 ноды.
9. **DO память устарела** — старые IP ([REDACTED-IP], [REDACTED-IP], [REDACTED-IP] для eni-sgp1) неактуальны. eni-sgp1 теперь 174.138.30.89. Всегда проверять через DO API: `curl -H "Authorization: Bearer dop_v1_..." https://api.digitalocean.com/v2/droplets`.
10. **eni-sgp1 uses do_gothbreach key** — NOT do_access. do_access → "Permission denied (publickey)".
11. **Droplet powered off ≠ dead** — SSH timeout means droplet is OFF. Power on via DO API `POST /droplets/{id}/actions {"type":"power_on"}`. Droplet IDs: gothbreach=580095930, nyc1=581420317, sgp1=581892235.
12. **DO API token:** `dop_v1_YOUR_DO_TOKEN`.
## Forum Scanner v6 (new)
Шаблон: `references/forum-scanner-v6-template.py`
- Работает на сервере без Telegram (сохраняет `forum_results.json`)
- Источники: v2ex (public API), nodeloc (куки), github search, HN, linux.do (CF-blocked stub), reddit (CF-blocked stub)
- Строки в URL экранируются через `urllib.parse.quote(..., safe='')` чтобы не ломать non-ASCII теги (羊毛, 推广)
- Deduplication: MD5 от URL, state в `seen_forum.json`
Примеры находок v2ex/nodeloc:
- v2ex `python`: "CodexSaver:在不让 Codex 变笨的前提下,让它更便宜" (`t/1210860`)
- v2ex `cloudflare`: "Cloudflare 的 5 秒盾/Turnstile api 到底靠不靠谱" (`t/1216674`)
- nodeloc `ai`: "Share: How to get GLM-5.2 and kimi-k2.7-code for free" (`t/topic/96683`)
- nodeloc `ai`: "Get $500 Credit for Free and Try Claude Opus 4.8" (`t/topic/96837`)
Deploy v6 template:
```bash
scp references/forum-scanner-v6-template.py root@[REDACTED-IP]:/root/scanner/forum_scanner.py
ssh root@[REDACTED-IP] 'cd /root/scanner && python3 forum_scanner.py'
```