.след
DotTraceIP
На входе список IP из access-логов, на выходе отчёт; всё, что между ними, укладывается в один запуск.
суть
Асинхронный CLI для массового разбора IP: по каждому адресу шесть источников, а именно геолокация, ASN и BGP-префикс, обратный DNS и репутация (AbuseIPDB, Spamhaus), опрашиваются параллельно через asyncio.gather. Сбой одного источника не роняет остальные, а отчёт пишется в TXT, JSON, CSV или самодостаточный HTML.
Платформа изнутри
Не список полей, а живое досье на адрес. Выберите IP из списка и нажмите "Проследить" и посмотрите, как всё работает изнутри.
Шесть источников опрашиваются параллельно и собирают из голого адреса досье: страна, оператор, сеть, имя хоста и уровень угрозы. Если один источник молчит, досье всё равно собирается.
- Страна
- Оператор
- Сеть
- Имя хоста
Шесть источников: нажмите, чтобы узнать, что даёт каждый:
Два механизма, которые делают .след рабочим инструментом, а не игрушкой.
Прокси прячет реальный IP
HTTP-запросы к источникам идут не напрямую, а через пул прокси: удалённая сторона видит адрес прокси, а не ваш. Если прокси сломается, .след не пойдёт в прямое соединение, а просто промолчит. Реальный IP не утекает даже при сбое.
Переключите режим и смотрите на строку «источник видит».
Скан целым списком
Как из тысяч строк в логе за один проход всплывают самые опасные адреса.
- 185.220.101.4 DE 100
- 45.155.205.233 RU 92
- 193.32.162.7 NL 64
- 104.244.76.13 US 31
- 5.188.206.18 SC 8
масштаб
размер и срок: что стоит за продуктом.
архитектура
Файл с IP построчно; валидация и дедуп перед сканом
- CLI · TUI menu read
main.py: headless scan и Rich-меню зовут run_scan
- async engine run_scan
TXT построчно в скане; затем JSON, CSV и самодостаточный HTML
Семафор на N IP, as_completed, Rich Live-дашборд
- proxy connector
- AbuseIPDB · Spamhaus
- Cymru → bgpview fan-out
- RDAP · rDNS
- TXT·JSON·CSV·HTML merge
aiohttp-socks HTTP/SOCKS; без прокси HTTP напрямую не идёт
- ip-api · geo/ASN gather
- AbuseIPDB · Spamhaus
BGP-префикс и ASN: Team Cymru DNS, фолбэк bgpview
Сеть владельца (RDAP) и обратный DNS; в thread pool
ip-api по HTTP: страна, город, ISP, ASN
Репутация: AbuseIPDB по ключу и Spamhaus DNSBL
стек
- Язык 1
- Фреймворк 3
- Данные 4
- Инфраструктура 3
- Клиент 3
Язык
- Python 3.12
Фреймворк
- asyncio
- aiohttp
- Rich
Данные
- TXT
- JSON
- CSV
- HTML
Инфраструктура
- GitHub Actions
- pytest
- mypy
Клиент
- aiohttp-socks
- dnspython
- ipwhois
что умеет
ключевые возможности продукта прямо сейчас.
6 источников на каждый IP
Геолокация и ASN (ip-api), BGP-префикс и имя автономной системы (Team Cymru, фолбэк bgpview), сеть владельца (RDAP), обратный DNS и репутация (AbuseIPDB, Spamhaus): по каждому адресу собирается досье из шести независимых источников.
Team Cymru отвечает по DNS и почти не лимитируется, поэтому он основной; bgpview.io подхватывает по HTTP, когда DNS молчит. Блокирующие резолверы (обратный DNS, RDAP, Spamhaus) уходят в thread pool с жёстким таймаутом 6 секунд, чтобы зависший ответ не забивал пул.
Async-веер с семафором
До 500 IP параллельно, а по каждому адресу шесть источников собираются одним asyncio.gather. Отказ любого источника не роняет остальные и не прерывает скан: его поля просто остаются дефолтными.
Движок держит asyncio.Semaphore на N адресов и отдаёт результаты по мере готовности через as_completed. Синхронная обёртка run_scan прячет весь asyncio внутри, поэтому снаружи CLI остаётся простым и синхронным.
Headless или живой дашборд
Тот же run_scan запускается и одной командой из cron, и из интерактивного меню в терминале. В headless результат льётся построчно, в интерактиве рисуется живой Rich-дашборд с прогрессом и цветной репутацией.
Разница только во флаге use_live: неинтерактивный режим печатает строки для логов и пайпов, а Rich Live показывает прогресс-бар, счётчик и таблицу последних результатов с зелёно-жёлто-красной ячейкой репутации.
Отчёт в четырёх форматах
TXT пишется прямо во время скана, а на выходе ещё JSON, CSV и самодостаточный HTML с сортировкой по столбцам, без единой внешней зависимости и CDN.
HTML несёт свою тёмную тему и чистый JS-сортировщик, CSV нейтрализует formula-injection ведущим апострофом, а запись атомарна (tmp плюс os.replace) и не идёт по симлинку.
Прокси и приватность
HTTP, SOCKS4 и SOCKS5 со случайной ротацией пула против rate-limit и маскировкой кредов. Если прокси задан, но не распарсился, HTTP-источники не уходят в прямое соединение, поэтому реальный IP не утекает.
В выводе прячется и последний октет IP, и пароль прокси. Проверка живости пула сама отсекает мёртвые прокси перед сканом и оставляет в файле только рабочие.
Отказоустойчивость и backoff
Сбойный источник не роняет отчёт, а ip-api при 429 уходит в backoff, уважая заголовок X-Ttl. Повторы IP в логах отсекаются дедупом ещё до скана.
dedup_preserve убирает дубли, сохраняя порядок первого вхождения (в access-логах один адрес встречается сотни раз). Конфиг устойчив к мусору: битый JSON откатывается к дефолтам, threads зажимается в диапазон 1..500, а пути держатся внутри рабочего каталога.
хронология
как продукт рос от первой версии.
-
15 Mar 2026
Старт: async-ядро за день
Первый коммит и сразу рабочее ядро: веер asyncio.gather с семафором, живой Rich-дашборд, прокси HTTP/SOCKS с маскировкой кредов, шесть источников на IP и четыре формата экспорта.
-
23 Jun 2026
Headless, устойчивость и CI
Неинтерактивный scan для cron и разбора логов, backoff на 429 с уважением X-Ttl, дедуп IP перед сканом и конвейер ruff плюс coverage на GitHub Actions.
-
1 Jul 2026
Публикация и аудит
Документация в стандарте DotCore, лицензия и обложка; pre-deploy аудит проходит вчистую и ставит зелёный бейдж. Проверены защита CSV от formula-injection, атомарная запись и удержание путей в рабочем каталоге.