ГлавнаяБлогКак вычислить скрытый парсинг данных: техника honeypot
Python

Как вычислить скрытый парсинг данных: техника honeypot

Узнайте, как с помощью honeypot-ловушки вычислить скрытый парсинг данных конкурентами. Реальный пример с Python-кодом и анализом логов.

Al
Редакция Algolitalgolit.ru
8 мин чтения14 июля 2026 г.

Как вычислить скрытый парсинг данных: техника honeypot

Представьте: ваш технический пост на форуме — точная копия внутренней архитектуры стартапа, который вы аудируете. А через день вам звонит отдел продаж, называя параметры, которые вы нигде не публиковали. Знакомо? Эта статья покажет, как с помощью простой ловушки (honeypot) вычислить, кто и как ворует ваши данные. Вы узнаете, как настроить трекинг ссылок, анализировать User-Agent и IP-адреса, чтобы раскрыть автоматизированную систему сбора информации.

Что такое honeypot и зачем он нужен

Honeypot (горшок с мёдом) — это приманка, которая выглядит как ценные данные, но на самом деле создана для отслеживания злоумышленников. В контексте парсинга веб-страниц honeypot — это специально размещённая ссылка или элемент, который не виден обычным пользователям, но загружается ботами. Когда бот её запрашивает, вы получаете его IP, User-Agent и другие метаданные.

В нашем сценарии P (аудитор) использовал этот метод, чтобы выяснить, кто копирует его технические конфигурации с DEV.to. Он разместил в посте ссылку на свой сервер, которая вела на PDF научной статьи. Но перед редиректом сервер логировал все данные запроса. Так P узнал, что Pulse AI сканирует форумы в поисках потенциальных клиентов.

Настройка honeypot-ловушки на Python

Вот минимальный сервер на Flask, который записывает информацию о каждом запросе и перенаправляет на легитимный ресурс.

from flask import Flask, request, redirect, jsonify
import logging
from datetime import datetime

app = Flask(__name__)

# Настройка логирования
logging.basicConfig(
    filename='honeypot.log',
    level=logging.INFO,
    format='%(asctime)s - %(message)s'
)

@app.route('/track')
def track():
    # Собираем данные о запросе
    log_entry = {
        'timestamp': datetime.utcnow().isoformat(),
        'ip': request.remote_addr,
        'user_agent': request.headers.get('User-Agent'),
        'referer': request.headers.get('Referer'),
        'headers': dict(request.headers)
    }
    # Записываем в лог
    logging.info(f"IP: {log_entry['ip']}, UA: {log_entry['user_agent']}, Referer: {log_entry['referer']}")
    # Перенаправляем на легитимный PDF (например, научную статью)
    return redirect('https://arxiv.org/pdf/2301.12345.pdf')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Этот код:

  • Принимает GET-запрос на /track
  • Логирует IP, User-Agent, Referer и все заголовки
  • Перенаправляет (302) на реальный PDF, чтобы бот не заподозрил подвоха

Запустите сервер на VPS и используйте ссылку http://ваш-сервер:5000/track в своих постах.

Анализ логов: как отличить бота от человека

После того как ловушка сработала, вы получите файл honeypot.log. Вот пример реальной записи из истории P:

2024-07-13 08:22:08 - IP: 192.168.1.10, UA: Mozilla/5.0 (compatible; PulseCrawler/1.0; +http://pulse.ai/bot), Referer: https://dev.to/p/post-4829

Обратите внимание на User-Agent: PulseCrawler/1.0. Это явно бот. Также Referer указывает на пост, где вы разместили ссылку. Если бы это был реальный пользователь, он бы перешёл по ссылке вручную, и User-Agent был бы обычным браузером (Chrome, Firefox).

Для автоматического анализа можно написать скрипт на Python:

import re
from collections import Counter

# Читаем лог
with open('honeypot.log', 'r') as f:
    lines = f.readlines()

# Извлекаем IP и User-Agent
ips = []
user_agents = []
for line in lines:
    match = re.search(r'IP: (\S+), UA: (.+), Referer:', line)
    if match:
        ips.append(match.group(1))
        user_agents.append(match.group(2))

# Статистика
print("Уникальные IP:", len(set(ips)))
print("Топ-5 IP:", Counter(ips).most_common(5))
print("Топ-5 User-Agent:", Counter(user_agents).most_common(5))

Если вы видите много запросов с разных IP, но одинаковым User-Agent (например, PulseCrawler), это верный признак автоматизированного парсинга.

Как усилить ловушку: дополнительные заголовки и куки

Чтобы усложнить жизнь ботам, можно проверять наличие определённых кук или заголовков. Например, добавить в ответ Set-Cookie, а потом проверять её при следующем запросе. Боты часто не обрабатывают куки.

from flask import make_response

@app.route('/track')
def track():
    # ... логирование ...
    resp = make_response(redirect('https://arxiv.org/pdf/2301.12345.pdf'))
    resp.set_cookie('honeypot', 'true', max_age=3600)
    return resp

Также можно добавить проверку на JavaScript: обычный пользователь выполнит JS, бот — нет. Но это уже сложнее и может нарушить работу ссылки.

Практический вывод: что делать прямо сейчас

Если вы публикуете технические посты с конфиденциальными деталями (архитектура, параметры моделей), обязательно используйте honeypot-ссылки. Это не займёт много времени:

  1. Разверните простой Flask-сервер (можно на бесплатном VPS или Render)
  2. Добавьте ссылку вида http://ваш-сервер:5000/track в каждый пост
  3. Анализируйте логи раз в неделю

Если заметите подозрительную активность — сохраните логи, сделайте скриншоты и, возможно, свяжитесь с юристом. Помните: знание — сила, а honeypot — ваш детектор лжи.

#honeypot#парсинг данных#безопасность#Flask#анализ логов
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →