• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Визуализация связей в OSINT: от плоских данных к инфраструктурным графам

stryx

floppy-диск
Пользователь
Регистрация
17.01.2026
Сообщения
9
Реакции
10
Дашборд и OSINT-кроулер
Для глубокого анализа веб-инфраструктуры OSINT-аналитики крайне полезен продакшн-краулер, который системно собирает данные с целевых сайтов. Представленный скрипт на Python — Crawler — позволяет обходить сайты, извлекать домены, субдомены, email-адреса, телефонные номера, ссылки, скрипты, изображения, социальные сети и другие элементы инфраструктуры. Данные автоматически структурируются и сохраняются в JSON для последующего анализа.

Как работает краулер
1. Инициализация: создаётся сессия requests с заголовками браузера для имитации реального пользователя. Задаются максимальное количество страниц для обхода (max_pages) и задержка между запросами (delay) для безопасного сканирования.
2. Очередь URL: используется deque для обхода сайта по внутренним ссылкам. Уже посещённые URL заносятся в set для предотвращения повторного обхода.
3. Извлечение данных: каждая страница обрабатывается через BeautifulSoup.
Скрипт получает:
- заголовки страниц (title) и мета-описания (meta description),
- email и телефоны с помощью регулярных выражений,
- домены и субдомены для построения инфраструктуры,
- ссылки, изображения, скрипты и внешние ресурсы,
- социальные сети и контактные данные (phone/fax/address/contact).
4. Обработка ссылок: URL нормализуются и классифицируются как внутренние (в рамках домена) или внешние. Новые внутренние URL добавляются в очередь.
5. Многопоточность и контроль скорости: скрипт позволяет масштабировать обход с помощью ThreadPoolExecutor, но в базовой версии используется последовательный обход с задержкой, чтобы не нагружать сервер.
6. Сохранение результатов: данные структурируются в JSON со всеми категориями (emails, phones, scripts, links и т.д.) и могут быть сохранены в файл для дальнейшего анализа в графовой модели.
Пример использования
После запуска:
Python:
pip3 install -r requirements.txt
python3 crawler.py https://example-project.com --max-pages 50 --delay 1 --output example.json
краулер обходит до 50 страниц, собирает все найденные объекты и сохраняет их в example.json.
Скрипт выводит краткую статистику: количество найденных доменов, субдоменов, email, телефонов и ссылок на социальные сети.
1768845084344.png

Интеграция данных в графовую модель
Результаты JSON можно использовать для построения мультиграфа в NetworkX. Узлы графа будут представлять домены, субдомены, email, телефоны, скрипты и социальные аккаунты, а рёбра — их связи (например, домен → email, домен → скрипт, домен → внешняя ссылка).
Этот подход позволяет аналитикам сразу визуализировать ключевые узлы, мосты, сегменты инфраструктуры, хабы и периферийные элементы[/B]. Структурированные данные JSON упрощают построение дашбордов, фильтрацию по типу узла, подсветку стратегических элементов и интеграцию с другими источниками.
Визуализация графа с PyVis
После того как данные краулера собраны в JSON, их удобно визуализировать с помощью интерактивного графа. В этом примере используется библиотека PyVis, которая строит web-интерактивные графы с поддержкой Force-Atlas layout, подсветкой узлов и рёбер, кластеризацией и настраиваемой цветовой схемой.
Структура графа
  • Центральный узел: целевой домен (target), от которого строятся все связи.
  • Домены: как внутренние, так и внешние, связанные с целевым узлом.
  • Email: узлы email, с рёбрами к доменам, которые они используют.
  • Телефоны: узлы с контактными номерами, соединённые с целевым доменом.
  • Внутренние страницы: каждая отдельная страница сайта, как отдельный узел.
  • Внешние ссылки: внешние URL, на которые ссылается сайт.
  • Скрипты: JavaScript файлы, загружаемые с доменов или внешних ресурсов.
  • Изображения: объединённый узел «Images», агрегирующий все найденные картинки.
Объяснение ключевых функций кода
1. add_node_safe(node_id, **kwargs) — добавляет узел только если его ещё нет в графе, чтобы избежать дублирования.
2. domain_from_email(email) — извлекает домен из email, создаёт связь email → домен, что позволяет отслеживать инфраструктуру через контактные адреса.
3. force_atlas_2based() — настраивает физический layout графа для компактного и наглядного отображения кластеров.
4. add_edge() — создаёт ребро с меткой (label) для уточнения типа связи, например «contains», «links_to», «loads_script».
5. Цвета и размеры узлов — отражают тип сущности и значимость: красный — target, оранжевый — домены, зелёный — email, голубой — телефоны, фиолетовый — внутренние страницы, серый — внешние ссылки, жёлтый — скрипты.
Пример использования
После генерации JSON с помощью Crawler:
Python:
python3 graph.py
1768845386200.png

Что даёт такая визуализация
  • Интерактивность: можно масштабировать граф, наводить на узлы и видеть подробную информацию.
  • Подсветка хабов: ключевые email, домены и скрипты сразу видны по цвету и размеру.
  • Анализ инфраструктуры: легко отслеживать связи target → email → домены, target → скрипт → внешний ресурс.
  • Кластеры: внутренние страницы, изображения и внешние ссылки агрегируются в отдельные узлы для наглядности.
  • Поддержка Force-Atlas layout: узлы автоматически группируются по логическим кластерам, показывая основные инфраструктурные компоненты.
Совмещение Crawler и PyVis создаёт мощный инструментарий для OSINT-аналитики. Краулер собирает структурированные данные с сайта, JSON становится источником для построения интерактивного графа. Аналитик получает наглядную карту инфраструктуры с ключевыми хабами, мостами, контактами и скриптами. Это превращает разрозненные данные в полноценную графовую модель, пригодную для глубокого исследования, выявления критических узлов и стратегических точек контроля.
OSINT Dashboard и Интерактивная Визуализация
1. Сбор данных (OSINT Crawler)
С помощью Crawler мы выполняем глубокий OSINT краулинг целевого сайта. Краулер обходит внутренние страницы, извлекает:
  • Домены и поддомены
  • Email-адреса
  • Телефонные номера
  • Социальные сети
  • Внешние и внутренние ссылки
  • Скрипты и изображения
  • Мета-описания и заголовки страниц
Ключевые функции:
  • extract_domains_and_subdomains — ищет все домены и поддомены в тексте страниц.
  • extract_emails / extract_phones — извлечение контактных данных через регулярные выражения.
  • extract_from_page — комплексная обработка HTML с BeautifulSoup для сбора всех сущностей.
  • crawl — основной метод обхода, добавляющий новые ссылки в очередь.
  • save_results — экспорт всех данных в JSON.
Этот этап создаёт структурированный JSON (example.json), который является основой для визуализации и аналитики.

2. Графовая визуализация (PyVis)
Используем PyVis для интерактивного графа, который отображает связи между:
  • Центральным узлом — целевой домен (target)
  • Домены → поддомены
  • Email → домены, которые они используют
  • Телефоны и контактные узлы
  • Внутренние страницы и внешние ссылки
  • Скрипты и изображения (агрегированные узлы)
Ключевые моменты кода:
  • add_node_safe — предотвращает дублирование узлов.
  • domain_from_email — связывает email с доменом.
  • force_atlas_2based — оптимизация layout графа для наглядности.
  • add_edge — создаёт рёбра с типами связи: contains, links_to, loads_script.
Цвета и размеры узлов помогают визуально выделять тип и значимость сущности:
Красный — домены, зелёный — email, голубой — телефоны, фиолетовый — страницы, жёлтый — скрипты, серый — внешние ссылки.

3. Streamlit Dashboard
1768845467051.png

Дэшборд на Streamlit объединяет визуализацию и аналитические панели. Основные возможности:
1. Overview — ключевые метрики: количество страниц, доменов, поддоменов, email, телефонов, скриптов, ссылок.
2. Network Graph — интерактивный граф PyVis с возможностью масштабирования, наведения и просмотра детальной информации.
3. Domains & Subdomains — таблицы и статистика: количество поддоменов и ссылок на каждый домен, графики с Plotly.
4. Contact Info — агрегированные email, телефоны, социальные сети и дополнительная контактная информация.
5. IP Information — получение IP-адресов доменов, геолокация через ip-api, карта распределения по странам.
6. Social Media — анализ социальных платформ и визуализация распределения.
7. WHOIS — подробные данные о регистраторах, дате создания, сроке действия, name servers и владельцах.
Ключевые функции:
  • fetch_subdomains_from_crtsh — поиск дополнительных поддоменов через crt.sh.
  • socket.gethostbyname + ip-api.com — получение IP и геолокации.
  • Plotly — интерактивные графики по поддоменам, ссылкам и социальным сетям.
  • st.file_uploader — загрузка JSON краулера для анализа.
  • st.tabs / st.expander — структурирование информации для удобства пользователя.

Совмещение всех трёх компонентов:
  • OSCrawler — собирает структурированные данные с сайта.
  • PyVis — визуализирует связи и инфраструктуру сайта.
  • Streamlit — даёт интерактивный дэшборд с аналитикой, графиками и детализацией узлов.
Аналитик получает:
  • Обзор инфраструктуры: ключевые хабы, мосты, критические узлы.
  • Контактную карту: email, телефоны, социальные сети.
  • Графовые и статистические отчёты: визуализация связей, подсчёт поддоменов, внутренние и внешние ссылки.
  • Динамическую аналитическую платформу, где каждая сущность кликабельна и интерактивна.
Интеграция OSINT краулера, PyVis графа и Streamlit дэшборда позволяет:
  • Превратить разрозненные данные в структурированную графовую модель.
  • Автоматически выявлять критические узлы и мосты.
  • Сегментировать и фильтровать данные по типу, домену и контактам.
  • Получать полноценную OSINT-панель для принятия информированных решений.
1768845612488.png
1768845563770.png
 

Вложения

  • graph-crawler.zip
    17.4 КБ · Просмотры: 28
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх