network-user
ко всем проектам
Инструмент 15 Mar 2026 в проде

.след

DotTraceIP

На входе список IP из access-логов, на выходе отчёт; всё, что между ними, укладывается в один запуск.

суть

Асинхронный CLI для массового разбора IP: по каждому адресу шесть источников, а именно геолокация, ASN и BGP-префикс, обратный DNS и репутация (AbuseIPDB, Spamhaus), опрашиваются параллельно через asyncio.gather. Сбой одного источника не роняет остальные, а отчёт пишется в TXT, JSON, CSV или самодостаточный HTML.

Платформа изнутри

Не список полей, а живое досье на адрес. Выберите IP из списка и нажмите "Проследить" и посмотрите, как всё работает изнутри.

Шесть источников опрашиваются параллельно и собирают из голого адреса досье: страна, оператор, сеть, имя хоста и уровень угрозы. Если один источник молчит, досье всё равно собирается.

Адрес из логов SSH/RDP-брутфорса: выберите любой
адрес 185.220.101.4 не собрано
Страна
Оператор
Сеть
Имя хоста
Уровень угрозы -

Шесть источников: нажмите, чтобы узнать, что даёт каждый:

Сохранить досье Один и тот же результат в любом формате: для глаз, таблиц или браузера.
results.txt
 

Два механизма, которые делают .след рабочим инструментом, а не игрушкой.

Прокси прячет реальный 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

масштаб

размер и срок: что стоит за продуктом.

1 день от первого коммита до рабочего async-ядра
~2.4k строк Python с тестами
82 теста pytest-asyncio, зелёный CI
500 IP в параллель: потолок семафора
6 источников данных на каждый IP

архитектура

per-IP · asyncio.gather read run_scan gather fan-out merge target_ips.txt CLI · TUI menu async engine proxy connector ip-api · geo/ASN AbuseIPDB · Spamhaus Cymru → bgpview RDAP · rDNS TXT·JSON·CSV·HTML

Файл с 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

Нажми на модуль: покажу его роль в системе.

стек

состав стека по слоям · 14
  • Язык 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, а пути держатся внутри рабочего каталога.

хронология

как продукт рос от первой версии.

  1. 15 Mar 2026

    Старт: async-ядро за день

    Первый коммит и сразу рабочее ядро: веер asyncio.gather с семафором, живой Rich-дашборд, прокси HTTP/SOCKS с маскировкой кредов, шесть источников на IP и четыре формата экспорта.

  2. 23 Jun 2026

    Headless, устойчивость и CI

    Неинтерактивный scan для cron и разбора логов, backoff на 429 с уважением X-Ttl, дедуп IP перед сканом и конвейер ruff плюс coverage на GitHub Actions.

  3. 1 Jul 2026

    Публикация и аудит

    Документация в стандарте DotCore, лицензия и обложка; pre-deploy аудит проходит вчистую и ставит зелёный бейдж. Проверены защита CSV от formula-injection, атомарная запись и удержание путей в рабочем каталоге.