Дашборд и 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 и т.д.) и могут быть сохранены в файл для дальнейшего анализа в графовой модели.
Пример использования
После запуска:
краулер обходит до 50 страниц, собирает все найденные объекты и сохраняет их в example.json.
Скрипт выводит краткую статистику: количество найденных доменов, субдоменов, email, телефонов и ссылок на социальные сети.
Интеграция данных в графовую модель
Результаты JSON можно использовать для построения мультиграфа в NetworkX. Узлы графа будут представлять домены, субдомены, email, телефоны, скрипты и социальные аккаунты, а рёбра — их связи (например, домен → email, домен → скрипт, домен → внешняя ссылка).
Этот подход позволяет аналитикам сразу визуализировать ключевые узлы, мосты, сегменты инфраструктуры, хабы и периферийные элементы[/B]. Структурированные данные JSON упрощают построение дашбордов, фильтрацию по типу узла, подсветку стратегических элементов и интеграцию с другими источниками.
Визуализация графа с PyVis
После того как данные краулера собраны в JSON, их удобно визуализировать с помощью интерактивного графа. В этом примере используется библиотека PyVis, которая строит web-интерактивные графы с поддержкой Force-Atlas layout, подсветкой узлов и рёбер, кластеризацией и настраиваемой цветовой схемой.
Структура графа
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:
Что даёт такая визуализация
OSINT Dashboard и Интерактивная Визуализация
1. Сбор данных (OSINT Crawler)
С помощью Crawler мы выполняем глубокий OSINT краулинг целевого сайта. Краулер обходит внутренние страницы, извлекает:
2. Графовая визуализация (PyVis)
Используем PyVis для интерактивного графа, который отображает связи между:
Красный — домены, зелёный — email, голубой — телефоны, фиолетовый — страницы, жёлтый — скрипты, серый — внешние ссылки.
3. Streamlit Dashboard
Дэшборд на 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 и владельцах.
Ключевые функции:
Совмещение всех трёх компонентов:
Для глубокого анализа веб-инфраструктуры 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
Скрипт выводит краткую статистику: количество найденных доменов, субдоменов, email, телефонов и ссылок на социальные сети.
Интеграция данных в графовую модель
Результаты 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
Что даёт такая визуализация
- Интерактивность: можно масштабировать граф, наводить на узлы и видеть подробную информацию.
- Подсветка хабов: ключевые email, домены и скрипты сразу видны по цвету и размеру.
- Анализ инфраструктуры: легко отслеживать связи target → email → домены, target → скрипт → внешний ресурс.
- Кластеры: внутренние страницы, изображения и внешние ссылки агрегируются в отдельные узлы для наглядности.
- Поддержка Force-Atlas layout: узлы автоматически группируются по логическим кластерам, показывая основные инфраструктурные компоненты.
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.
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
Дэшборд на 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-панель для принятия информированных решений.
Вложения
Последнее редактирование: