todo/Hysteria/traffic-stats-api.md
loop-uh baf0091fa3
Some checks failed
Published content check / validate (push) Failing after 17s
git.zapret.moe → git2.zapret.moe во всём хранилище, защита от возврата старых имён
git.zapret.moe в России заблокирован по имени, как и wiki.zapret.moe. Ссылки
на Forgejo во всех заметках, футерах, wizard.html и главной заменены на
git2.zapret.moe (включая закодированные адреса значков shields.io).

Какое имя рабочее, теперь решают реестры хоста /etc/zapret-*-domains.conf через
zapret-site-names: pre-commit хук vault отклоняет добавленные строки с
заблокированным именем, сборка Quartz сама переводит ссылки и baseUrl на
рабочие имена. Правило в AGENTS.md переписано под этот механизм.

scripts/wiki-stats.py: переходы с любых имён вики и git (wikiN, gitN) больше
не считаются внешними сайтами. content-check: проверка зеркал сторонних
проектов узнаёт любое имя git.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:51:32 -04:00

7.9 KiB
Raw Permalink Blame History

date tags aliases link description
2026-07-11
hysteria
api
мониторинг
трафик
Hysteria Traffic Stats API
Hysteria API трафика
Hysteria kick пользователя
https://v2.hysteria.network/docs/advanced/Traffic-Stats-API/ Traffic Stats API в Hysteria 2: включение через trafficStats, трафик по пользователям, кто онлайн и kick клиента — для тех, кто делит сервер с другими.

[!mirror] Резервное зеркало Актуальная версия этой страницы — на основной вики: wiki2.zapret.moe/Hysteria/traffic-stats-api

🦎 Hysteria 2 — Traffic Stats API

[!info] О чём заметка Как включить и использовать HTTP-API статистики Hysteria 2: посмотреть трафик по пользователям, кто сейчас онлайн, и отключить (kick) клиента. Полезно тем, кто раздаёт сервер нескольким людям. Включается в Hysteria/config-server. Обзор протокола — Hysteria/00-overview.

TL;DR

  • Traffic Stats API — встроенный в сервер HTTP-интерфейс: сколько кто накачал (/traffic), кто онлайн (/online), плюс возможность отключить пользователя (/kick).
  • Работает по именам пользователей (id), которые задаются аутентификацией: userpass, HTTP-бэкенд или другой способ из Hysteria/config-server.
  • Включается секцией trafficStats с listen и secret. Всегда задавайте secret — иначе любой, кто достучится до порта API, увидит статистику и сможет кикать пользователей.
  • Kick сам по себе не блокирует навсегда: клиент переподключится. Чтобы отключить насовсем, надо ещё забанить пользователя в вашем бэкенде аутентификации.

Зачем это нужно

Если сервер используете только вы — API, скорее всего, не понадобится. Он полезен, когда сервером пользуется несколько человек (userpass или свой бэкенд аутентификации): можно смотреть, кто сколько трафика израсходовал, кто сейчас подключён, и точечно отключать нарушителей — всё через простые HTTP-запросы, которые легко дёрнуть из скрипта или панели.

Включение

Добавьте в Hysteria/config-server:

trafficStats:
  listen: :9999
  secret: some_secret
  • listen — адрес и порт, где поднимется API.
  • secret — ключ доступа. Прикладывается к запросам в заголовке Authorization.

[!danger] Без secret API открыт всем Если не задать secret, любой, у кого есть доступ к адресу API, сможет посмотреть статистику трафика и отключать ваших пользователей. Всегда задавайте secret, а лучше — ещё и закройте порт API через Hysteria/acl-outbounds или фаервол, чтобы он не торчал наружу. Не вешайте API на публичный интерфейс без крайней необходимости.

Запрос с ключом делается так:

curl -H 'Authorization: some_secret' http://ip:9999/traffic

Эндпоинты

GET /traffic — трафик по пользователям

Возвращает JSON: id пользователя → сколько байт передано. tx — отдача клиента (upload), rx — приём клиента (download).

{
  "wang": { "tx": 514, "rx": 4017 },
  "joe":  { "tx": 7790, "rx": 446623 }
}

Параметр ?clear=1 обнуляет счётчики после выдачи — удобно для периодического снятия статистики (например, раз в сутки): GET /traffic?clear=1.

GET /online — кто онлайн

Возвращает JSON: id пользователя → число подключений. Важно: считаются экземпляры клиента (устройства), а не активные проксируемые соединения. Значение 2 у пользователя означает, что он подключён с двух устройств.

{ "wang": 2, "joe": 1 }

POST /kick — отключить пользователей

Принимает JSON-массив id для отключения:

["wang", "joe"]

[!warning] Kick не блокирует навсегда У клиента встроена логика переподключения — после kick он попытается подключиться снова. Чтобы отключить пользователя насовсем, недостаточно kick: нужно ещё заблокировать его в вашем бэкенде аутентификации (или убрать из списка userpass). Kick полезен как «сбросить сессию здесь и сейчас», а не как «забанить».

GET /dump/streams — детали соединений

Возвращает JSON с информацией по каждому QUIC-потоку активных TCP-прокси-соединений: пользователь, запрошенный адрес, «пронюханный» протоколом домен (если включён sniffing), счётчики трафика, время создания и последней активности. Если добавить заголовок Accept: text/plain, вывод будет человекочитаемым, похожим на ss -atn. Полезно для отладки — увидеть, куда именно ходят соединения конкретного пользователя.

📚 См. также


[!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.