237 lines
18 KiB
Markdown
237 lines
18 KiB
Markdown
---
|
||
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()`:
|
||
- `&` → `&`, `<` → `<`, `>` → `>`, `"` → `"`
|
||
- Контрольные символы (<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'
|
||
``` |