1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-websockify

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
run
Loading...
README.md

websockify: Поддержка WebSockets для любого приложения/сервера

Проект 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.

Бинарные данные WebSockets

С версии 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, когда это необходимо.

Дополнительные возможности websockify

Эти возможности не обязательны для базовой работы.

  • Запуск демона: Когда указана опция -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

Основная реализация websockify выполнена на Python. Есть несколько альтернативных реализаций на других языках доступных в наших сестринских репозиториях websockify-js (JavaScript/Node.js) и websockify-other (C, Clojure, Ruby).

Кроме того, есть несколько внешних проектов, которые реализуют протокол websockify. Узнайте больше информации в разделе Матрицы функциональности.

Обертка программыПомимо прокси-соединения от исходного адреса до целевого адреса (который может находиться на другой системе), websockify имеет возможность запускать программу на локальной системе и проксировать WebSocket-трафик на обычный TCP-порт, управляемый этой программой.Это достигается путём использования библиотеки LD_PRELOAD (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 )

Вы можете оставить комментарий после Вход в систему

Введение

Websockify — это WebSocket для TCP-прокси/моста. Он позволяет браузеру подключаться к любому приложению, серверу или сервису. Реализован с использованием Python, C, Node.js и Ruby. Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-websockify.git
git@api.gitlife.ru:oschina-mirror/mirrors-websockify.git
oschina-mirror
mirrors-websockify
mirrors-websockify
master