Files
utun2/tools/etcpmon

ETCP Monitor

WinAPI-монитор соединений uTun. Работает под Windows и Wine, подключается по IPv4 TCP к control_server. Метрики выбранного соединения запрашиваются раз в 100 мс, списки соединений и сокетов — раз в секунду. Сеть обрабатывается в GUI-потоке.

Полное описание протокола, интерфейса, владения ресурсами и текущих ограничений: etcpmon_doc.md. Серверная часть: control_server_doc.md.

Сборка и запуск

Windows/MSYS2 UCRT64:

cd tools\etcpmon
build.bat
etcpmon.exe

build.bat использует C:\msys64, либо MSYS2_ROOT/MSYS2. Внутри MSYS2 можно выполнить bash build.sh.

Linux с установленными MinGW и Wine, из корня проекта:

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:

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