Боты6 мин чтения·9 августа 2026 г.·обновлено 8 сентября 2026 г.

Немодифицированный python-requests в логах — почему это не всегда злоумышленник

python-requests — не бот одного оператора, а популярная HTTP-библиотека Python. Разбираем контринтуитивный факт: настоящие злоумышленники почти всегда меняют этот UA, а значит его «нетронутое» появление скорее говорит о безобидной автоматизации.

TVTrafficVeil TeamЭксперты по защите веб-трафика
Уникальная иллюстрация бота python-requests: нежелательный технические клиенты

python-requests — библиотека requests для Python, один из самых популярных HTTP-клиентов в скриптах и бэкендах по всему миру. В логах появление этого UA означает автоматизацию на Python, а не браузер живого посетителя. Оператор: не фиксирован — это открытая библиотека, а не сервис одной компании. Ниже — факты из публичной документации и практики верификации: полный UA, IP/ASN, robots.txt, с кем не путать и как настроить правила так, чтобы не отрезать соседний полезный агент.

Что такое python-requests

Параметр Значение
User-Agent (токен) python-requests
Полная / типовая строка UA python-requests/x.y.z
Оператор Не фиксирован — это библиотека, которую использует кто угодно
Назначение Популярный HTTP-клиент для скриптов и бэкендов на Python; UA говорит только о технологии запроса, а не о конкретном сервисе
Официальная документация docs.python-requests.org
IP / верификация ❌ Отдельного официального списка нет и быть не может: это клиентская библиотека. За UA может стоять что угодно — от вашего же мониторинга до чужого парсера цен
ASN (ориентир) Не зафиксирован публично
Соблюдение robots.txt Не применимо. robots.txt — это про операторов краулеров, а не про библиотеку; нужен IP allowlist своих скриптов и deny/rate-limit для остального
Категория TrafficVeil Технические клиенты

Почему немодифицированный python-requests — не всегда тревожный знак

Здесь стоит объяснить контринтуитивную вещь. Строка python-requests/x.y.z настолько широко известна как «явный признак бота», что многие защищённые сайты (например, Reddit) блокируют её по умолчанию. Именно поэтому по-настоящему мотивированные недобросовестные скрейперы почти никогда не оставляют этот UA как есть — они меняют его на что-то похожее на браузер (Chrome, Safari), чтобы не попасть под моментальный бан. Практический вывод: если в логах виден именно немодифицированный python-requests, это чаще говорит о легитимной или как минимум неопытной автоматизации — внутреннем мониторинге, простой интеграции, учебном или исследовательском скрипте — чем о продвинутом злоумышленнике. Тот, кто действительно хочет остаться незамеченным, обычно уже подделал UA под браузер. Есть и обратная сторона: если кто-то маскирует python-requests, меняя только строку UA на Chrome-подобную, TLS-отпечаток соединения (fingerprint handshake) у библиотеки чаще всего остаётся на базе OpenSSL — и это несоответствие между заявленным браузером и реальным сетевым уровнем видно более продвинутым антибот-системам, даже когда сама строка UA выглядит убедительно.

Дискуссия в сообществе: стоит ли банить python-requests как «сканер»

В сообществе веб-безопасности были споры о том, насколько правильно включать python-requests в готовые блок-листы «security-сканеров» по умолчанию — именно потому, что это открытая, широко используемая библиотека для абсолютно легитимных задач, а не признак конкретно вредоносной активности. Слепое добавление в блок-лист рискует зацепить безобидную автоматизацию наравне со злонамеренной. Это подкрепляет общий подход: решение по allow/deny нужно принимать по IP и поведению конкретного источника, а не по одной строке UA.

Не уверены, кто ходит по вашему сайту?

Подключите домен и посмотрите живую ленту: кто пришёл, с какой сети, что запрашивал и по какому правилу был пропущен или заблокирован.

Посмотреть свой трафик

Как работает и зачем приходит

Не доверяйте UA как единственному критерию. Разрешайте только известные IP своих интеграций; для всего остального под этим UA — rate-limit или 403 в TrafficVeil.

Нагрузка на сервер

По сводке TrafficVeil (bots-summary, март–июнь 2026, июнь по 14.06) python-requests: 769 350 запросов суммарно (март 44 292, апрель 184 111, май 382 198, июнь 158 749). Перед жёсткими правилами сверьте июль–август в аналитике TrafficVeil. Смотрите не только RPS, но и path-паттерн: плотный обход каталога без сессий — повод для rate-limit/deny; точечные хиты под собственные интеграции — другая политика.

Обнаружение в логах и IP

grep -i "python-requests" /var/log/nginx/access.log
grep -i "python-requests" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
grep -i "python-requests" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head

IP="1.2.3.4"
whois -h whois.cymru.com " -v $IP"
dig +short -x "$IP"

Важно: IP-листа нет и быть не может — это клиентская библиотека. User-Agent легко подделать в обе стороны: как под python-requests, так и с него на что-то другое — для решения allow/deny связка UA + IP/ASN своих же известных интеграций надёжнее одной строки UA.

robots.txt

User-agent: python-requests
Disallow: /

User-agent: python-requests
Allow: /

User-agent: python-requests
Disallow: /admin/
Disallow: /cart/
Allow: /

robots.txt не про библиотеку — это соглашение для операторов краулеров, а у python-requests оператора в этом смысле нет. Нужен IP allowlist своих же скриптов и общий deny/rate-limit для остального трафика под этим UA. Если среди своих интеграций есть «полезная» и «случайно забытая устаревшая», делайте отдельные правила по IP, а не один общий UA-блок для всех.

Nginx / Apache / TrafficVeil

Nginx

if ($http_user_agent ~* "python-requests") {
    return 403;
}

Apache

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} python-requests [NC]
RewriteRule ^ - [F,L]

TrafficVeil

  • Найдите python-requests в ботах домена или /system/bots
  • Не доверяйте UA как единственному сигналу. Разрешайте только известные IP своих интеграций; остальное — rate-limit/403
  • После изменения сверьте логи за 15–60 минут

Рекомендации

  • Не доверяйте UA. Разрешайте только известные IP своих интеграций; остальное — rate-limit/403 в TrafficVeil
  • Не полагайтесь на robots.txt как на барьер для этой библиотеки — она к ней попросту неприменима по смыслу
  • Не баньте по одной строке UA слепо — среди трафика могут быть и ваши же легитимные скрипты
  • Помните о TLS-несоответствии: продвинутая защита может отличить подделанный под браузер python-requests по сетевому отпечатку, даже если строка UA выглядит правдоподобно
  • Сверяйте свежую статистику TrafficVeil, не только сводку март–июнь 2026

С кем не путать

Клиент Роль Комментарий
python-urllib Встроенный HTTP-клиент стандартной библиотеки Python оператор не фиксирован (библиотека)
python-httpx Современный HTTP-клиент для Python оператор не фиксирован (библиотека)
aiohttp Асинхронный HTTP-клиент оператор не фиксирован (библиотека)
curl CLI-инструмент / HTTP-библиотека оператор не фиксирован (библиотека)
wget CLI-инструмент для загрузки файлов оператор не фиксирован (библиотека)

Стратегия

Цель Действие
Нужна польза от оператора Allow + точечные Disallow служебных путей (применимо только к своим известным интеграциям)
Бот только грузит сервер / забирает данные Disallow + deny в TrafficVeil / nginx
Есть официальный IP JSON Не применимо — у библиотеки его не существует по определению
Официального IP нет UA + IP своих интеграций + поведение; не полагайтесь на строку UA как на единственный сигнал

Частые вопросы

Кто оператор бота python-requests?
Оператора в привычном смысле нет — это открытая HTTP-библиотека Python, которую использует кто угодно для самых разных задач.
Почему немодифицированный python-requests в логах не всегда признак атаки?
Потому что эта строка настолько известна как «сигнал бота», что мотивированные злоумышленники почти всегда меняют её на что-то похожее на браузер — оставленный как есть UA чаще говорит о легитимной или неопытной автоматизации.
Как отличить подделанный под Chrome python-requests от настоящего браузера?
По TLS-отпечатку соединения: у Python он обычно остаётся на базе OpenSSL, даже если строка UA заявляет о Chrome, и это несоответствие видно продвинутым антибот-системам.
Стоит ли banить python-requests как security-сканер по умолчанию?
В сообществе безопасности это спорная практика — библиотека слишком широко используется для легитимных задач, и слепой бан рискует зацепить безобидную автоматизацию.
Работает ли robots.txt для контроля python-requests?
Не по смыслу — это соглашение для операторов краулеров, а у библиотеки оператора нет; нужен allowlist по IP своих интеграций и rate-limit/deny для остального.
Есть ли у python-requests официальный список IP для верификации?
Нет и не может быть — это клиентская библиотека, а не сервис с собственной инфраструктурой.
#python-requests#HTTP-клиенты#технические клиенты#TLS-фингерпринт#robots.txt#TrafficVeil
TV
TrafficVeil Team

Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак. Разборы ботов пишем по логам подключённых доменов и открытым данным операторов.

Похожие статьи

Ещё материалы из раздела «Боты» — те же вопросы, другие агенты.

Проверьте защиту своего сайта

Подключение занимает несколько минут. Начните с анализа трафика и включайте блокировки после проверки логов.

Тарифа на трафик нет. Платите за людей, а не за тех, кого отбили: боты, атаки и всё, что срезали фильтры, в счёт не идут. Тариф — число доменов и глубина настроек.

TrafficVeil