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

105 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-07-11
tags:
- hysteria
- api
- мониторинг
- трафик
aliases:
- Hysteria Traffic Stats API
- Hysteria API трафика
- Hysteria kick пользователя
link: https://v2.hysteria.network/docs/advanced/Traffic-Stats-API/
description: "Traffic Stats API в Hysteria 2: включение через trafficStats, трафик по пользователям, кто онлайн и kick клиента — для тех, кто делит сервер с другими."
---
> [!mirror] Резервное зеркало
> Актуальная версия этой страницы — на основной вики: [wiki2.zapret.moe/Hysteria/traffic-stats-api](https://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|серверный config.yaml]]:
```yaml
trafficStats:
listen: :9999
secret: some_secret
```
- **`listen`** — адрес и порт, где поднимется API.
- **`secret`** — ключ доступа. Прикладывается к запросам в заголовке `Authorization`.
> [!danger] Без secret API открыт всем
> Если не задать `secret`, любой, у кого есть доступ к адресу API, сможет посмотреть статистику трафика и отключать ваших пользователей. Всегда задавайте `secret`, а лучше — ещё и закройте порт API через [[Hysteria/acl-outbounds|ACL]] или фаервол, чтобы он не торчал наружу. Не вешайте API на публичный интерфейс без крайней необходимости.
Запрос с ключом делается так:
```shell
curl -H 'Authorization: some_secret' http://ip:9999/traffic
```
## Эндпоинты
### GET `/traffic` — трафик по пользователям
Возвращает JSON: id пользователя → сколько байт передано. `tx` — отдача клиента (upload), `rx` — приём клиента (download).
```json
{
"wang": { "tx": 514, "rx": 4017 },
"joe": { "tx": 7790, "rx": 446623 }
}
```
Параметр `?clear=1` обнуляет счётчики после выдачи — удобно для периодического снятия статистики (например, раз в сутки): `GET /traffic?clear=1`.
### GET `/online` — кто онлайн
Возвращает JSON: id пользователя → число подключений. Важно: считаются **экземпляры клиента (устройства)**, а не активные проксируемые соединения. Значение `2` у пользователя означает, что он подключён с двух устройств.
```json
{ "wang": 2, "joe": 1 }
```
### POST `/kick` — отключить пользователей
Принимает JSON-массив id для отключения:
```json
["wang", "joe"]
```
> [!warning] Kick не блокирует навсегда
> У клиента встроена логика переподключения — после kick он попытается подключиться снова. Чтобы отключить пользователя насовсем, недостаточно kick: нужно ещё заблокировать его в вашем бэкенде аутентификации (или убрать из списка `userpass`). Kick полезен как «сбросить сессию здесь и сейчас», а не как «забанить».
### GET `/dump/streams` — детали соединений
Возвращает JSON с информацией по каждому QUIC-потоку активных TCP-прокси-соединений: пользователь, запрошенный адрес, «пронюханный» протоколом домен (если включён sniffing), счётчики трафика, время создания и последней активности. Если добавить заголовок `Accept: text/plain`, вывод будет человекочитаемым, похожим на `ss -atn`. Полезно для отладки — увидеть, куда именно ходят соединения конкретного пользователя.
## 📚 См. также
- [[Hysteria/config-server|Конфиг сервера]] — где включается `trafficStats` и настраивается аутентификация (id пользователей).
- [[Hysteria/acl-outbounds|ACL и маршрутизация]] — как закрыть порт API от посторонних.
- [[Hysteria/00-overview|Hysteria 2 — обзор]] — общая картина.
- 🔗 [Traffic Stats API — официальная документация](https://v2.hysteria.network/docs/advanced/Traffic-Stats-API/)
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git2.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Hysteria/traffic-stats-api.md) · [весь репозиторий](https://git2.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).