Проект websockify ранее назывался wsproxy и был частью проекта noVNC.
На самом базовом уровне, websockify просто преобразует трафик WebSockets в обычный сокетный трафик. Websockify принимает рукопожатие WebSockets, расшифровывает его и начинает переадресацию трафика между клиентом и целевой системой в обоих направлениях.
Замечательные коммиты, объявления и новости публикуются на @noVNC
Если вы являетесь разработчиком/интегратором/пользователем websockify (или хотите им стать), пожалуйста, присоединяйтесь к группе обсуждения noVNC/websockify.
Ошибки и запросы на новые возможности можно отправить через github issues.
Если вы хотите выразить благодарность за проект websockify, вы можете сделать пожертвование в пользу замечательной некоммерческой организации, такой как: Compassion International, SIL, Habitat for Humanity, Electronic Frontier Foundation, Against Malaria Foundation, Nothing But Nets, и т.д. Пожалуйста, сообщите об этом в твиттере @noVNC.
С версии websockify 0.5.0 поддерживаются только протоколы WebSocket HyBi/IETF 6455. Поддержка старого формата данных Base64 отсутствует.### Шифрование соединений WebSockets (wss://)
Для шифрования трафика с использованием URI-схемы WebSocket 'wss://' вам потребуется создать сертификат и ключ для загрузки в Websockify. По умолчанию, Websockify загружает сертификат с именем файла self.pem
, но опции --cert=CERT
и --key=KEY
могут переопределить имя файла. Вы можете создать самоподписной сертификат с помощью OpenSSL. Когда вас спросят о общем имени, используйте имя хоста сервера, где будет работать прокси:
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
Чтобы использовать самоподписной сертификат, вам нужно сделать так, чтобы ваш браузер признал его. Это можно сделать путём установки его как доверенного сертификата или использованием того же самого сертификата для HTTPS-соединения, к которому вы первым делом обратитесь и одобрили. Обычно браузеры не предлагают диалоговое окно "доверять сертификату?", открывая WSS-сокет с недействительным сертификатом, поэтому вам нужно принудительно его одобрить одним из этих двух методов. Различающими соединения браузера являются порты,
например, если ваш URL сайта — https://my.local:8443, а URL WebSocket — wss://my.local:8001, сначала перейдите по адресу https://my.local:8001, добавьте исключение, затем перейдите по адресу https://my.local:8443 и добавьте другое исключение.
Тогда HTML-страница, обслуживаемая через :8443, сможет открывать соединение WSS к :8001.Если у вас есть коммерческий/валидный SSL-сертификат с одним или несколькими промежуточными сертификатами, объедините их в один файл, начиная с серверного сертификата, затем добавьте промежуточные сертификаты от центра сертификации и так далее. Укажите этот файл с помощью опции --cert
, а затем также укажите ключ с помощью --key
. Наконец, используйте --ssl-only
, когда это необходимо.
Эти возможности не обязательны для базовой работы.
Запуск демона: Когда указана опция -D
, websockify запускается
в фоновом режиме как демонический процесс.
SSL (URI wss:// для WebSockets): Эта возможность автоматически обнаруживается websockify путём прослушивания первого отправленного клиентом байта, после чего происходит обёртывание сокета, если данные начинаются с \x16
или \x80
(что указывает на использование SSL).
Запись сессий: Эта функция позволяет записывать трафик, отправляемый и принимаемый от клиента, в файл с помощью опции --record
.
Мини-веб-сервер: websockify может обнаруживать и отвечать на обычные HTTP-запросы на том же порту, что и WebSockets-прокси. Эта функциональность активируется с помощью опции --web DIR
, где DIR является корнем веб-каталога для обслуживания.
Обёртка программы: см. раздел «Обёртка программы» ниже.* Лог-файлы: websockify может сохранять всю информацию логирования в файл. Эта функциональность активируется с помощью опции --log-file FILE
, где FILE — это путь к файлу, в который будут сохранены логи.* Плагины аутентификации: websockify может требовать аутентификацию для WebSocket-соединений и, если вы используете --web-auth
, также для обычных HTTP-запросов. Эта функциональность активируется с помощью опций --auth-plugin CLASS
и --auth-source ARG
, где CLASS обычно является одной из определённых в auth_plugins.py, а ARG — конфигурацией плагина.*
Token плагины: один экземпляр websockify может соединять клиентов с несколькими различными заранее настроенными целевыми объектами в зависимости от токена, отправленного клиентом с помощью параметра URL token
, или имени хоста, используемого для доступа к websockify, если вы используете --host-token
. Эта функциональность активируется с помощью опций --token-plugin CLASS
и --token-source ARG
, где CLASS обычно является одним из токенов из файла token_plugins.py, а ARG — это конфигурация плагина.
Основная реализация websockify выполнена на Python. Есть несколько альтернативных реализаций на других языках доступных в наших сестринских репозиториях websockify-js (JavaScript/Node.js) и websockify-other (C, Clojure, Ruby).
Кроме того, есть несколько внешних проектов, которые реализуют протокол websockify. Узнайте больше информации в разделе Матрицы функциональности.
rebind.so
), которая перехватывает системные вызовы bind(). Указанный порт перемещается на новый свободный высокий порт localhost/loopback. Затем websockify проксирует WebSocket-трафик, направленный на исходный порт, на новый (перемещённый) порт программы.Режим обёртки программы активируется заменой целевого адреса на --
, за которым следует команда строки для запуска программы.
./run 2023 -- PROGRAM ARGS
Опция --wrap-mode
используется для указания действия при завершении или демонизации запакованной программы.
Пример использования websockify для обёртки команды vncserver (которая работает в фоновом режиме) для работы с noVNC:
./run 5901 --wrap-mode=ignore -- vncserver -geometry 1024x768 :1
Пример обёртки telnetd (из krb5-telnetd). Telnetd завершает работу после закрытия соединения, поэтому режим обёртки устанавливается на перезапуск команды:
sudo ./run 2023 --wrap-mode=respawn -- telnetd -debug 2023
Страница wstelnet.html
в проекте websockify-js демонстрирует простой клиент telnet на основе WebSockets (используйте 'localhost' и '2023' как хост и порт соответственно).### Установка websockify
Скачайте одну из версий выпуска или последнюю версию разработки, распакуйте её и выполните команду python3 setup.py install
как root в директории, где вы распаковали файлы. Обычно это также установит numpy для лучшей производительности, если у вас ещё нет установленной этой библиотеки. Однако, numpy является необязательным. Если вам не требуется установка numpy или если вы не можете скомпилировать его, вы можете отредактировать файл setup.py и удалить строку install_requires=['numpy'],
перед выполнением команды python3 setup.py install
.
После этого websockify должен быть доступен в вашем пути. Выполните
websockify --help
, чтобы подтвердить правильность установки.### Запуск с помощью Docker/Podman
Вы также можете запустить websockify с использованием Docker, Podman, Singularity, udocker или вашего любимого контейнерного окружения, поддерживающего образы контейнеров OCI.
Точка входа образа — это команда run
.
Для сборки образа выполните:
./docker/build.sh
После сборки вы можете запустить его с теми же аргументами, что и для команды run
, при этом указывая порты:
docker run -it --rm -p <порт>:<порт_контейнера> novnc/websockify <порт_контейнера> <аргументы_run>
Например, чтобы перенаправить трафик с локального порта 7000 на 10.1.1.1:5902, используйте:
docker run -it --rm -p 7000:80 novnc/websockify 80 10.1.1.1:5902
Если вам нужно включить файлы, такие как для опций --web
или --cert
, просто смонтируйте необходимые файлы в объёме /data
и затем ссылайтесь на них обычным образом:
docker run -it --rm -p 443:443 -v websockify-data:/data novnc/websockify --cert /data/self.pem --web /data/noVNC :443 --token-plugin TokenRedis --token-source myredis.local:6379 --ssl-only --ssl-version tlsv1_2
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )