GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

novnc

websockify – WebsockifyはWebSocketからTCPへのプロキシ/ブリッジです。 これにより、ブラウザーはどのアプリケーション/サーバ..

投稿日:

WebsockifyはWebSocketからTCPへのプロキシ/ブリッジです。 これにより、ブラウザーはどのアプリケーション/サーバー/サービスにも接続できます。 Python、C、Node.js、Rubyでの実装

websockify:任意のアプリケーション/サーバーに対するWebSocketのサポート

websockifyは以前はwsproxyと命名され、 noVNCプロジェクトの一部でした。

最も基本的なレベルでは、WebSockifyはWebSocketsトラフィックを通常のソケットトラフィックに変換するだけです。 WebsockifyはWebSocketsハンドシェイクを受け取り、それを解析して、クライアントとターゲットの間で双方向のトラフィックの転送を開始します。

ニュース/ヘルプ/連絡先

特筆すべきコミット、アナウンス、ニュースが@noVNCに投稿されます

WebSockifyの開発者/インテグレータ/ユーザ(または参加したい場合)のnoVNC / websockifyディスカッショングループに参加してください

バグや機能要求はgithubの問題を介して提出できます

Websockifyの感謝の気持ちを表明したい場合は、 Compassion InternationalSILHabitat for HumanityElectronic Frontier FoundationMalaria FoundationNothing But Netsなどの非営利団体に寄付することができます。 。

WebSocketsバイナリデータ

websockify 0.5.0以降、HyBi / IETF 6455 WebSocketプロトコルのみがサポートされています。 古いBase64エンコードデータフォーマットはサポートされていません。

暗号化されたWebSocket接続(wss://)

WebSocket ‘wss://’ URIスキームを使用してトラフィックを暗号化するには、Websockifyをロードするための証明書とキーを生成する必要があります。 デフォルトでは、Websockifyは証明書ファイル名self.pemを読み込みますが、– --cert=CERTおよび--key=KEYオプションはファイル名を上書きできます。 opensslを使用して自己署名証明書を生成することができます。 共通名の入力を求められたら、プロキシを実行するサーバーのホスト名を使用します。

openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem

自己署名証明書が機能するには、クライアント/ブラウザーがそれを理解できるようにする必要があります。 これは、受け入れた証明書としてインストールするか、最初にナビゲートして承認するHTTPS接続に同じ証明書を使用してインストールできます。 ブラウザは一般的にあなたに「信頼証明書」を与えていません。 無効な証明書を持つWSSソケットを開くことによってプロンプトが表示されるので、これらの2つの方法のいずれかでそれを受け入れる必要があります。

1つ以上の中間証明書を持つ商用/有効なSSL証明書を持っている場合は、それらを1つのファイル、サーバー証明書、次にCAからの中間体などに--certます--certオプションを使用してこのファイルをポイントし、また、 – keyキーを--keyます。 最後に、必要に応じて--ssl-onlyを使用して--ssl-only

Websock Javascriptライブラリ

include/websock.js Javascriptライブラリライブラリは、標準のWebSocketオブジェクトに似たWebsockオブジェクトを提供しますが、WebsockはWebSockifyを介してRaw TCPソケット(バイナリストリーム)との通信を可能にします。

Websockには受信キューのバッファリングが組み込まれています。 メッセージイベントには実際のデータは含まれていませんが、新しいデータが利用可能であるという通知に過ぎません。 バイナリデータを受信キューから読み取るには、いくつかのrQ *メソッドが利用できます。

Websock APIは、 websock.js API wikiページに記載されています。

Websockとwebsockifyをブラウザtelnetクライアント( wstelnet.html )として使用する例については、「プログラムのラップ」を参照してください。

その他のwebsockify機能

これらは、基本的な操作には必要ありません。

  • Daemonizing: -Dオプションを指定すると、websockifyはデーモンプロセスとしてバックグラウンドで実行されます。

  • SSL(wss:// WebSockets URI):これは、クライアントから送信された最初のバイトを盗聴し、データが ‘\ x16’または ‘\ x80’(SSLを示す)で始まる場合、ソケットをラップすることによってwebsockifyによって自動的に検出されます。

  • セッション記録:クライアントから送受信されたトラフィックを--recordオプションを使用してファイルに記録することを可能にするこの機能。

  • ミニウェブサーバ:websockifyは、WebSocketsプロキシと同じポート上で通常のウェブリクエストを検出して応答することができます。 この機能は--web DIRオプションで有効になります。ここで、DIRは提供するWebディレクトリのルートです。

  • プログラムをラップする:以下の「プログラムのラップ」を参照してください。

  • ログファイル:websockifyはすべてのログ情報をファイルに保存できます。 この機能は--log-file FILEオプションで有効になります。ここで、FILEはログを保存するファイルです。

  • 認証プラグイン:websockifyはwebsocket接続の認証を要求できます。また、 --web-authを使用する場合は、通常のWeb要求に対しても--web-auth要求できます。 この機能は--auth-plugin CLASS--auth-source ARGオプションで有効になります。CLASSは通常auth_plugins.pyのもので、ARGはプラグインの設定です。

  • トークンプラグイン:–host --host-tokenを使用する場合、 token URLパラメータまたはホスト名を使用してクライアントから送信されたトークンに応じて、websockifyの1つのインスタンスで複数の異なる事前設定済みのターゲットにクライアントを接続でき--host-token この機能は--token-plugin CLASS--token-source ARGオプションで有効になります.CLASSは通常token_plugins.pyのもので、ARGはプラグインの設定です。

websockifyの実装

websockifyの主な実装はPythonで行われています。 他の言語(C、Node.js、Clojure、Ruby)では、 other/サブディレクトリ(さまざまなレベルの機能を持つ)にいくつかの代替実装があります。

さらに、WebSockifyの「プロトコル」を実装するその他の外部プロジェクトもいくつかあります。 詳細については、代替実装のフィーチャマトリックスを参照してください。

プログラムのラップ

送信元アドレスからターゲットアドレス(別のシステムにある可能性があります)へのプロキシに加えて、websockifyはローカルシステム上でプログラムを起動し、プログラムによって所有/バインドされている通常のTCPポートへのプロキシWebSocketsトラフィックを起動できます。

これは、小さなLD_PRELOADライブラリ( rebind.so )でrebind.soされ、プログラムによってbind()システムコールをインターセプトします。 指定されたポートは新しいローカルホスト/ループバックフリーのハイポートに移動されます。 websockifyは、元のポートに向かうWebSocketsトラフィックをプログラムの新しい(移動した)ポートにプロキシします。

プログラム・ラップ・モードは、ターゲットを置き換えて起動します。プログラム・コマンド行を続けてラップします。

`./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ページは、単純なWebSocketベースのtelnetクライアントを示しています(ホストとポートにそれぞれ ‘localhost’と ‘2023’を使用します)。

Python sslモジュールをビルドする(Python 2.5およびそれ以前のバージョン用)

  • ビルドの依存関係をインストールします。 Ubuntuでは、次のコマンドを使用します。

    sudo aptitude install python-dev bluetooth-dev

  • websockify repostoryのトップレベルで、sslモジュールをダウンロード、ビルド、シンボリックリンクします:

    wget --no-check-certificate http://pypi.python.org/packages/source/s/ssl/ssl-1.15.tar.gz

    tar xvzf ssl-1.15.tar.gz

    cd ssl-1.15

    make

    cd ../

    ln -sf ssl-1.15/build/lib.linux-*/ssl ssl







-novnc
-, , , , , , , , , , , , , ,

執筆者: