Перейти к содержанию

Протокол FD Control

Эта функция в основном используется для разработки Android-приложений прокси.

Клиент Hysteria поддерживает отправку файлового дескриптора (fd) исходящих QUIC-соединений любому процессу, слушающему на fdControlUnixSocket.

Примечание: fdControlUnixSocket в настоящее время эффективен только для исходящих QUIC-соединений. Сторонние Android-клиенты, использующие эту функцию, должны самостоятельно обрабатывать дополнительные DNS-запросы для домена сервера Hysteria, или убедиться, что опция server в конфигурации клиента Hysteria содержит IP-адрес, а не домен.

Роли

  • Сервер: Сторонний процесс, слушающий на fdControlUnixSocket, например основной процесс Android-приложения.
  • Клиент: Процесс клиента Hysteria.

Реализация сервера

  1. Прослушивать Unix Socket на основе пути, который должен быть типа SOCK_STREAM.
  2. Принимать соединения, инициированные клиентом, с помощью accept(2).
  3. Получить один fd, отправленный клиентом через recvmsg(2).
  4. Обработать fd, полученный на шаге 3 (например, вызвав VpnService.protect()), а затем закрыть fd.
  5. Ответить клиенту одним байтом, уведомляя о продолжении операций. Рекомендуется отвечать '\x01' в нормальных условиях; другие значения в настоящее время не определены.
  6. Закрыть соединение, установленное на шаге 2 — каждое соединение обрабатывает только один fd.

Ссылки