問題タブ [socat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - netcat/socat/telnet を使用して手動で websocket に接続するにはどうすればよいですか?
プロトコルがどのように機能するかを知るために、リファレンス websocket エコー サーバーに「手動で」接続しようとしています (そのために socat を使用しています)。ただし、サーバーは常に応答を提供せずに接続を閉じます。理由はありますか?
これが私がすることです:
次に、ターミナルに次のテキストを貼り付けます。
同じマシン上のFirefoxで、開発者ツールとの接続のパラメーターを盗聴しましたが、これは問題なく動作します。したがって、それらは正しいと思います。ただし、その後、サーバーは応答を提供せずにすぐに接続を閉じます。なんで?プロトコルを「手動で」実装するにはどうすればよいですか?
端末で test と入力し、入力した内容をサーバーに返信させたいと思います (Web ブラウザーで動作します)。
linux - socat を使用してソケットに接続し、コマンドを送信し、1 行を読み取ります
UNIX ソケット (実際には、 Linux 固有と思われる抽象的なソケット) を介して通信できるプロセスがあります。
このプロセスにコマンドを送信する必要があるシェル スクリプトを作成しています。この目的のために SOCAT を使用してみることにしました。(1)抽象ソケットに接続する方法、(2)単一のコマンド(文字列)を送信する方法、(3)応答を読み取って標準出力に出力する方法を理解しようとしています。
これまでのところ、次のように言うだけで簡単に接続できます。
これにより STDIN がソケットに接続されるため、手動でコマンドを入力することがわかっている場合、ソケットは文字列を読み取り、結果の応答をコンソールに出力します。
スクリプトで socat を実行する場合を除き、STDIN への文字列の送信を自動化する必要があります。これを行う最も簡単な方法は、文字列を STDIN にパイプすることです。" " というコマンドがあるstatus
とします。
結果が stdout に送信されないことを除いて、これは機能しているようです (socat はエラーを報告しません)。むしろ、呼び出しは応答なしで単に返されます。では、ソケットから 1 行を読み取り、その結果を stdout に表示するにはどうすればよいでしょうか?
bash - socat: シリアルポートとの会話をログに記録します
しばらくして、最終的にsocat
と同じように動作するようになりましたputty
。
また、会話をログ ファイルに記録したいと思います。
編集:
私はそれを行う方法を見つけました(しかし、それはクラッジだと思います)ので、私は自分の質問に答えました-そしてそれはスタックオーバーフロー基準による有効な答えです。
linux - 接続のクローズ後に Socat が終了する
このコマンド (シリアル ポート リダイレクタ) は、TCP:11313 で単一の接続を受け入れます。
ただし、接続が失われると、上記の socat プロセスが強制終了され、クライアントは接続できなくなります。
fork
上記のコマンドの最後にオプションを追加することでこれを解決できます。ただし、複数のクライアントが接続できるようになります。しかし、私は 1 つの接続のみを受け入れたいと考えています。
これを達成する方法はありますか?
tcp - 複数の送信者から UDP メッセージを受信し、TCP 経由で転送する
を使用して TCP 経由で UDP トラフィックを転送しようとしていますsocat
。このプロセスによってフレーム境界が失われることはわかっていますが、この場合は問題ありません。このコマンドを使用して、部分的に機能させることができました:
つまりsocat
、クライアントが TCP ソケットに接続するのを待ってから、UDP ソケットをリッスンする新しい子プロセスを fork します。複数のクライアントが TCP を使用して接続できる必要があり、すべてのクライアントが受信したすべての UDP メッセージを取得する必要があります。これは、単一のエンドポイントのみが UDP ソケットにデータを送信している限り機能します。ただし、2 番目のエンドポイントが UDP ソケットにデータを送信している場合、そのデータは既に確立されている TCP 接続を介して転送されません。
socat
フォークされた子プロセスで UDP ソケットを呼び出すconnect()
と、最初のパケットを受信したり、他のホストから送信されたデータをフィルタリングしたりするとすぐに呼び出されるようです。
socat
UDP トラフィックをフィルタリングせず、リッスンしている UDP ソケットに送信されたエンドポイントからパケットを転送するように指示する方法はありますか?
linux - socatを介して、ローカル引数を使用してリモートコマンドを実行していますか?
コンピュータ B のソケットから文字列を受け取るコンピュータ A に socat ソケットをセットアップしたいと考えています。この文字列は、コンピュータ A で実行されるコマンドの引数として解釈する必要があります。
コンピューター A:
socat TCP4-L:3334,fork SYSTEM:"./parsecommand.sh $INCOMING_STRING_OF_ARGS"
コンピューター B:
socat TCP4:remote.host:3334 SYSTEM:"echo 'out going string of args'"
これはそのようなモーションの正しい構文ですか? たとえば、socat ユニバースに $@ に相当する変数があるので、$INCOMING_STRING_OF_ARGS をその変数に置き換えて、これを機能させることができますか?
完全なコンテキストでは、実行中のリモート コマンドを「ssh」に置き換える「socat」が必要です。コンピューター A とコンピューター B の間に双方向接続を確立し、コンピューター B からコンピューター A にコマンドを送信し、コンピューター A でコマンドを実行し、出力をコンピューター B に返します。