todo/Hysteria/traffic-stats-api.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

101 lines
7.4 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/
---
# 🦎 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://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/Hysteria/traffic-stats-api.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).