# 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` в текущем рабочем каталоге каждого процесса.