66 lines
3.7 KiB
Markdown
66 lines
3.7 KiB
Markdown
# ETCP Monitor
|
||
|
||
WinAPI-монитор соединений uTun. Работает под Windows и Wine, подключается по IPv4 TCP
|
||
к `control_server`. Метрики выбранного соединения запрашиваются раз в 100 мс,
|
||
списки соединений и сокетов — раз в секунду. Сеть обрабатывается в GUI-потоке.
|
||
|
||
Полное описание протокола, интерфейса, владения ресурсами и текущих ограничений:
|
||
[etcpmon_doc.md](etcpmon_doc.md). Серверная часть: [control_server_doc.md](../../src/control_server_doc.md).
|
||
|
||
## Сборка и запуск
|
||
|
||
Windows/MSYS2 UCRT64:
|
||
|
||
```cmd
|
||
cd tools\etcpmon
|
||
build.bat
|
||
etcpmon.exe
|
||
```
|
||
|
||
`build.bat` использует `C:\msys64`, либо `MSYS2_ROOT`/`MSYS2`. Внутри MSYS2 можно выполнить `bash build.sh`.
|
||
|
||
Linux с установленными MinGW и Wine, из корня проекта:
|
||
|
||
```bash
|
||
make -C tools/etcpmon CC=x86_64-w64-mingw32-gcc
|
||
wine tools/etcpmon/etcpmon.exe
|
||
make -C tools/etcpmon CC=x86_64-w64-mingw32-gcc TEST_RUNNER=wine check
|
||
```
|
||
|
||
Для запуска GUI и WinAPI-тестов нужен дисплей; без рабочего стола можно использовать `xvfb-run -a`.
|
||
|
||
## Подключение
|
||
|
||
В конфиге uTun:
|
||
|
||
```ini
|
||
[control]
|
||
ip=127.0.0.1
|
||
port=9090
|
||
allow=127.0.0.1/32
|
||
```
|
||
|
||
Без `allow` все подключения отклоняются. Транспорт управления не шифруется и не аутентифицирует
|
||
ключи ETCP: используйте loopback или доверенный защищённый канал.
|
||
|
||
При открытии окна etcpmon автоматически начинает connect к `192.168.40.1:9091`.
|
||
Нажмите Disconnect, задайте числовой IPv4/порт своего сервера и нажмите Connect.
|
||
Первое соединение выбирается автоматически. Enter в адресе/порту подключает, Escape отключает.
|
||
|
||
## Состав
|
||
|
||
- `etcpmon_client.c/h`: неблокирующий Winsock-клиент, разбор кадров, pending ответов, кеши и история.
|
||
- `etcpmon_gui.c/h`: окно, контролы, опрос списков, обработка событий и Action Result.
|
||
- `etcpmon_graph.c/h`: график восьми метрик первого линка и выбор сэмпла курсором.
|
||
- `etcpmon_protocol.h`: общий с сервером wire-layout: `[size:2][type:1][seq_id:1][payload]`.
|
||
- `test_etcpmon.c`: регрессии клиента/GUI с локальным TCP-сервером; запускаются через `make check`.
|
||
|
||
Команда Action `nodes` возвращает текст узлов, `nat` подтверждает запуск NAT/STUN-проверки.
|
||
Неизвестная команда или недоступная служба возвращает ошибку с сохранением TCP-соединения.
|
||
|
||
Клиент досылает частичные кадры через ограниченный TX (64 КиБ/256 кадров). Сервер формирует
|
||
один кадр до 32 КиБ, приостанавливая чтение до его отправки; список узлов передаётся порциями.
|
||
Таймауты и ограничения подписки описаны в [etcpmon_doc.md](etcpmon_doc.md).
|
||
|
||
Клиент пишет `etcpmon.log`, сервер — `control_server.log` в текущем рабочем каталоге каждого процесса.
|