TrafficVeil
Боты 6 мин21 августа 2026 г.

aiohttp Client в логах: библиотека, а не единый бот

За токеном aiohttp/ в access.log может стоять что угодно — от собственного скрипта мониторинга до чужого скрейпера, потому что это открытая Python-библиотека без единого оператора, а не именованный сервис. Разбираемся, почему нетронутый aiohttp-заголовок часто выдаёт скорее легитимный внутренний трафик, чем попытку спрятаться, и как не заблокировать случайно свою же интеграцию вместе с чужим фоновым шумом.

TV
TrafficVeil Team
Эксперты по защите веб-трафика
Содержание статьи
  1. 1. Что такое aiohttp Client на самом деле
  2. 2. Зачем aiohttp Client приходит на сайт
  3. 3. Нагрузка и риски
  4. 4. Как найти aiohttp Client в логах
  5. 5. robots.txt для aiohttp Client
  6. 6. Блокировка вручную и через TrafficVeil
  7. 7. Что делать: короткий алгоритм
  8. 8. С кем не путать aiohttp Client
  9. 9. Стратегия allow/deny для aiohttp Client
DDoS L7

DDoS атака что это простыми словами и как защитить сайт

Разобрали виды атак, признаки DDoS, последствия, уровни защиты, L7 DDoS и схему подключения TrafficVeil через DNS/reverse proxy.

Читать про DDoS

Энциклопедия ботов TrafficVeil

618 ботов с описаниями, паттернами User-Agent и фильтром по категориям — открытый справочник для аудита логов и настройки защиты.

Открыть справочник

aiohttp/ в логах — не имя одного конкретного бота, а технический отпечаток открытой Python-библиотеки для асинхронных HTTP-запросов. За этим токеном может стоять буквально что угодно: внутренний скрипт компании, webhook-сервис, монитор аптайма, интеграция через API — или наивный скрейпер, который просто не потрудился подменить User-Agent. Именно поэтому категория «Технические клиенты» здесь точнее, чем «бот» в привычном смысле: единого оператора у aiohttp нет и быть не может.

1. Что такое aiohttp Client на самом деле

aiohttp — популярная библиотека с открытым кодом (проект Aio-Libs) для асинхронных HTTP-запросов на Python, официальная документация — docs.aiohttp.org. Библиотекой пользуются тысячи независимых разработчиков и сервисов для совершенно разных задач: от простых internal-скриптов до промышленных интеграций. Библиотека может выступать и клиентом (делает запросы к вашему сайту — именно этот случай попадает в access.log), и сервером — это два разных режима использования одного и того же проекта.

Если разработчик не переопределяет заголовок явно, aiohttp автоматически подставляет собственный User-Agent в формате версии Python и версии библиотеки:

Python/3.9 aiohttp/3.8.6

Именно поэтому черновой паттерн поиска только по aiohttp/ технически верен, но обедняет картину: полная строка обычно включает и версию Python, что может пригодиться при более точной сегментации трафика по разным клиентам/скриптам.

Параметр Значение
Название aiohttp Client
Природа Открытая Python-библиотека для HTTP-запросов, а не отдельный именованный сервис или компания
User-Agent / паттерн Полная форма по умолчанию: Python/X.X aiohttp/X.X.X; краткий поиск по aiohttp/ тоже сработает
Оператор Не существует единого оператора — библиотеку использует неограниченное число независимых разработчиков и сервисов
Важная особенность Заголовок User-Agent тривиально подменяется одной строкой кода — то, что он НЕ подменён, само по себе слабый сигнал: чаще так ведут себя внутренние скрипты и легитимные интеграции, а не боты, целенаправленно маскирующиеся под браузер
robots.txt Нет смысла ожидать единообразного поведения — соблюдение полностью зависит от того, как написан конкретный скрипт конкретного разработчика
Пометка TrafficVeil Легитимный / Технические клиенты

2. Зачем aiohttp Client приходит на сайт

Поскольку это не единый сервис, а инструмент, реальных сценариев использования много одновременно на одном и том же домене:

  • Мониторинг доступности — самописный или коробочный скрипт проверяет, что сайт или конкретный эндпоинт отвечает;
  • Webhook и интеграции — сторонний сервис, подключённый к вашему сайту по API, делает запросы через aiohttp внутри своего кода;
  • Внутренняя автоматизация — собственные скрипты компании (парсинг курсов, синхронизация данных, тестирование) написаны на Python с этой библиотекой;
  • Начинающий или неаккуратный скрейпер — кто-то собирает данные с сайта и не позаботился о том, чтобы выглядеть как обычный браузер.

Типичный кейс: в аналитике фиксируется рост hits без реальных сессий, в access.log под этим временем преобладает aiohttp/ на пагинации и карточках. Поскольку у библиотеки нет единого владельца, разбираться нужно не «кто такой aiohttp», а какой конкретно скрипт это делает — через паттерн запрашиваемых URL, IP и время суток.

3. Нагрузка и риски

Главный практический риск — фоновый шум в аналитике и расход CPU/bandwidth, который искажает статистику «живого» трафика в Метрике/GA. Поскольку под одним UA может скрываться сразу несколько разных клиентов с разными целями, стоит сегментировать трафик по IP/ASN, а не считать весь aiohttp/-трафик однородным.

Полезный практический нюанс: если бы кто-то целенаправленно хотел замаскировать скрейпинг под обычного пользователя, подмена User-Agent на строку браузера — это буквально одна строка кода в aiohttp. Поэтому нетронутый заголовок aiohttp/ в логах чуть чаще указывает на легитимный внутренний или интеграционный трафик, чем на попытку скрытного парсинга, — хотя это лишь статистическая склонность, а не гарантия.

4. Как найти aiohttp Client в логах

# Базовый поиск
grep -i "aiohttp/" /var/log/nginx/access.log

# Более точный поиск с версией Python — помогает отличать разные скрипты
grep -iE "Python/[0-9.]+ aiohttp/" /var/log/nginx/access.log

# Топ URL, которые вычитывает клиент
grep -i "aiohttp/" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head

# Топ IP — здесь особенно важно, так как под одним UA могут быть разные источники
grep -i "aiohttp/" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

# Суточная активность
grep -i "aiohttp/" /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1 | sort | uniq -c

# Разбивка по версии библиотеки — разные IP с разными версиями почти наверняка разные клиенты
grep -oiE "aiohttp/[0-9.]+" /var/log/nginx/access.log | sort | uniq -c | sort -rn

Верификация. Подделать строку легко, но, как отмечено выше, сам факт «честного» aiohttp-заголовка — слабый позитивный сигнал. Для решения allow/deny смотрите связку UA + IP/ASN + частоту + набор URL — при таком общем UA это единственный способ понять, кто именно за ним стоит:

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

5. robots.txt для aiohttp Client

# Жёсткий запрет
User-agent: aiohttp/
Disallow: /

# Разрешить всё
User-agent: aiohttp/
Allow: /

# Компромисс: закрыть личный кабинет и служебные разделы, оставить публичку
User-agent: aiohttp/
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Disallow: /account/
Disallow: /api/
Allow: /

Важно: поскольку под этим UA скрываются разные, никак не связанные между собой клиенты, правило в robots.txt заблокирует их все разом — включая, возможно, ваш собственный внутренний скрипт или полезную интеграцию. Прежде чем ставить общий Disallow, стоит убедиться, что среди источников нет своего же сервиса.

6. Блокировка вручную и через TrafficVeil

Nginx:

if ($http_user_agent ~* "aiohttp/") {
    return 403;
}

limit_req_zone $binary_remote_addr zone=aiohttp:10m rate=10r/m;
location / {
    if ($http_user_agent ~* "aiohttp/") {
        limit_req zone=aiohttp burst=20 nodelay;
    }
}

Apache (.htaccess):

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

TrafficVeil:

  • перед блокировкой по UA уточните у команды разработки, не завязана ли на aiohttp своя интеграция или мониторинг;
  • если источников несколько и часть из них полезна — точнее блокировать по конкретным IP/ASN нежелательных источников, а не по всему UA сразу;
  • для разовых непонятных всплесков без явного вреда — rate-limit безопаснее полного deny именно из-за смешанной природы этого трафика;
  • после изменения сверьте логи: нежелательные хиты должны уйти в блок/лимит, а собственные интеграции (если есть) — продолжать работать штатно.

7. Что делать: короткий алгоритм

  • Убедитесь, что среди источников нет вашего же скрипта или подключённой интеграции — это единственный шаг, специфичный именно для этого UA;
  • Пользы не найдено, источник чужой — Disallow/403;
  • Источников несколько с разными целями — сегментируйте по IP/ASN вместо блокировки всего UA целиком;
  • Нагрузка мешает, но природа трафика не ясна — сначала rate-limit, полный запрет позже;
  • Не блокируйте по маске User-agent: *, чтобы не задеть Googlebot/YandexBot заодно.

8. С кем не путать aiohttp Client

Бот / сосед Кластер UA Комментарий
Python Client (requests) Технические клиенты python-requests/ легитимный, синхронный аналог aiohttp — та же логика «библиотека, не сервис»
Go Client Технические клиенты go-http-client легитимный, тот же принцип для экосистемы Go
OkHttp Технические клиенты okhttp легитимный, HTTP-библиотека для Java/Kotlin/Android — в том числе внутри мобильных приложений
curl Технические клиенты curl/ легитимный, консольная утилита, а не библиотека приложений
Java HTTPClient Технические клиенты apache-httpclient легитимный

9. Стратегия allow/deny для aiohttp Client

Ситуация Действие
Источник — собственный скрипт или подключённая интеграция Allow, при необходимости закрыть только /admin /cart /api
Несколько разных источников под одним UA, часть полезна Разделять по IP/ASN, не блокировать весь UA целиком
Явно посторонний и мешает Disallow + запрет в TrafficVeil
Нужен доступ, но пики нерегулярны Rate-limit на nginx/TrafficVeil
Подозрение на скрытный скрейпинг под этим UA Маловероятно технически — маскировка под браузер тривиальна, поэтому чистый aiohttp-заголовок чаще не признак попытки спрятаться, но проверяйте IP/ASN на всякий случай

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

aiohttp Client — это конкретный бот с одним оператором?

Нет, это открытая Python-библиотека, которую независимо используют тысячи разработчиков для совершенно разных задач.

Соблюдает ли aiohttp правила robots.txt?

Это зависит целиком от того, как написан конкретный скрипт — у библиотеки нет единого поведения, которое можно было бы гарантировать.

Как выглядит User-Agent aiohttp по умолчанию?

Обычно это строка вида Python/3.9 aiohttp/3.8.6, а не просто голый токен aiohttp/.

Значит ли нетронутый aiohttp-заголовок, что это точно безобидный трафик?

Не гарантия, но слабый позитивный сигнал: подменить UA на браузерный — одна строка кода, и тот, кто хочет спрятаться, обычно так и делает.

Можно ли просто заблокировать весь трафик с этим UA?

Осторожно — под одним заголовком может скрываться и чужой скрейпер, и ваш собственный внутренний скрипт или интеграция, которую вы случайно отключите.

Как отличить разные источники под одним UA aiohttp?

По связке IP/ASN, паттерну запрашиваемых URL и версии Python/aiohttp в строке заголовка.

#aiohttp#Python#HTTP-клиент#User-Agent#технические клиенты#robots.txt#TrafficVeil
TV
TrafficVeil Team

Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак.

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

Skype (общий токен): не один бот, а минимум три разных

Общий поиск по слову «skype» в логах цепляет сразу несколько разных, исторически связанных механизмов Microsoft — от закрытого в мае 2025 года превью-бота до активной внутренней инфраструктуры Teams, унаследовавшей кодовое имя SkypeSpaces. Разбираемся, почему общее правило блокировки по этому слову рискованно, и как разделить разные варианты в своих логах.

7 мин

Fedicabot: превью-fetcher Fedica, а не краулер Fediverse

Fedicabot принадлежит Fedica — крупной платформе публикации и аналитики соцсетей, а не имеет отношения к Fediverse, несмотря на созвучное название. Официальная страница оператора прямо заявляет: бот не обходит сайты целиком, а читает только страницу, которую указал конкретный пользователь при планировании публикации, — это меняет всю логику оценки риска.

6 мин

Amazon Kendra: возможно, ваш корпоративный поиск

Amazon Kendra — реальный сервис корпоративного поиска AWS, и его коннектор Web Crawler обходит только те конкретные URL, которые явно указал клиент AWS при настройке источника данных — то есть это не свободный обход, а целевая индексация по чьему-то заданию. Разбираемся, почему первый шаг здесь — проверить, не настроен ли на вашем сайте (или у партнёра) такой поисковый индекс, прежде чем блокировать бота как постороннего.

6 мин

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

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