これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できる encapsulate コマンドです。
プログラム:
NAME
encapsulate - リモートのサンプリングを使用して、単一のソケットで複数のチャネルを多重化します
終了ステータスを処理し、ソケットを閉じずに会話を終了します。
ネットパイプ 4.2
SYNOPSIS
カプセル化 --fd n [ -詳細 ] [ --subproc [ --infd n[=sidの]] [ --outfd n[=sidの]] [
-デュプレックス n[=sidの]] [ -デュプレックス n[=sidの]] [ --デュプレックス n[=sidの]] [ --ローカルを優先 ] [
--prefer-remote ] [ -ローカルのみ ] [ --リモートのみ ]] [ - クライアント ] [ - サーバ ]
-[#n][v][s[in][on][dn][ion][oin][l][r][L][R]] command 引数 ...
DESCRIPTION
カプセル化 限定的な方法でセッション制御プロトコル (SCP) を実装します。
カプセル化 SCP を使用して、単一のソケット上で複数の仮想チャネルを多重化します。
カプセル化 ローカル プログラムの終了ステータスをリモート エンドに送信します。
SCP チャネルを予約し、リモート終了ステータスを受け取ります。 カプセル化 は、大阪で
ソケットを閉じずに会話の境界。
フラグは任意の順序で表示されます。 フラグではない最初の引数は、
スポーン(仮定 --subproc が指定されている場合、それ以外の場合はエラー)。
OPTIONS
--fd n, -#n : サブプロセスを多重化するソケットのファイル記述子を指定します
チャンネルオーバー。 この引数は必須です
-詳細, -v : 追加情報 (著作権表示を含む) を stderr に出力します。
--subproc, -s : サブプロセスを生成します。 を指定する必要があります command 引数. これを省略すると
フラグ、それならあなたはしなければならない 供給する command 引数. このフラグを省略すると、 カプセル化
入力を stdin から SCP 多重化ソケットの送信チャネルにコピーし、次にコピーします。
SCP 多重化ソケットの着信チャネルからの stdout。 このフラグを省略すると、
入力チャネル フラグと出力チャネル フラグは無効です。
--infd n, -in : 入力チャンネルを指定します。 サブプロセスがあれば、
記述子から読み取る n. サブプロセスがない場合 カプセル化 そのから読み取ります
ディスクリプタ n (これらは SCP チャネルの反対極性です)。
--outfd n, -on : 出力チャネルを指定します。 サブプロセスがあれば、
記述子に書き込む n. サブプロセスがない場合 カプセル化 その記述子に書き込みます
n (これらは SCP チャネルの反対極性です)。
-デュプレックス n, -ion : 双方向チャネルを指定します。 リモート カプセル化 を送信します
SCP SYN パケット、およびローカルは同じセッションの SYN で応答します。 の
サブプロセスは、ファイル記述子を読み書きできるようになります n. サブプロセスは使用する必要があります
ソックスダウン(1) 一方の方向を閉じ、もう一方の方向を離れる必要がある場合のプログラム
オープン。
-デュプレックス n, -dn : 双方向チャネルを指定します。 の - クライアント の終わり カプセル化
接続は SCP SYN パケットを送信し、 - サーバ 同じセッションの SYN で応答します。
サブプロセスは、ファイル記述子を読み書きできるようになります n. サブプロセスは
使用 ソックスダウン(1) 一方の方向を閉じ、もう一方の方向を閉じる必要がある場合のプログラム
方向オープン。
--デュプレックス n, -オイn : 双方向チャネルを指定します。 ローカル カプセル化 を送信します
SCP SYN パケット、およびリモートは同じセッションの SYN で応答します。 の
サブプロセスは、ファイル記述子を読み書きできるようになります n. サブプロセスは使用する必要があります
ソックスダウン(1) 一方の方向を閉じ、もう一方の方向を離れる必要がある場合のプログラム
オープン。
双方向チャネルのすべての長い形式には、オプションの =sidの コンポーネント
SCP セッション ID を指定するために使用できます。 これは接続時にあまり役に立ちません
それ自体の別のインスタンスにカプセル化しますが、別のインスタンスに接続するときに便利な場合があります
SCP を実装するソフトウェア。
--ローカルを優先, -l : リモートとローカルの両方のサブプロセスが非ゼロで終了した場合
(誤った) コード、 カプセル化 ローカル サブプロセスと同じコードで終了します。 この
is デフォルト。
--prefer-remote, -r : リモートとローカルの両方のサブプロセスが非ゼロで終了した場合
(誤った) コード、 カプセル化 リモートサブプロセスと同じコードで終了します。
-ローカルのみ, -L : カプセル化 ローカル ステータスで終了し、リモート ステータスを無視します。
--リモートのみ, -R : カプセル化 リモート ステータスで終了し、ローカル ステータスを無視します。
セッション IDが そして サブプロセス チャンネル
サブプロセスのチャネルを指定する場合、フラグの順序は非常に重要です。
すべてのフラグをローカルに カプセル化 リモートに対応するフラグが必要です
カプセル化 それはまったく同じ位置にあります (チャネルのリスト内)。 記述子
番号は対応している必要はありませんが、各チャネルの位置とタイプは対応している必要があります。
残念ながら複雑な要因は、 --infd --outfd
サブプロセスを指定すると異なります。
ローカルリモート
--infd サブプロセス付き --outfd サブプロセス付き
--infd サブプロセス付き --infd
--infd --infd サブプロセス付き
--infd --outfd
--outfd サブプロセス付き --infd サブプロセス付き
--outfd サブプロセス付き --outfd
--outfd --outfd サブプロセス付き
--outfd --infd
-デュプレックス --デュプレックス
-デュプレックス -デュプレックス
--デュプレックス -デュプレックス
右:
l$ カプセル化 --infd 0 --duplex 5
r$ カプセル化 --outfd 1 --DUPLEX 5
違う:
l$ カプセル化 --infd 0 --duplex 5
r$ カプセル化 --outfd 1 --duplex 5
-デュプレックス 対応するものが必要です --デュプレックス リモートエンドで。
l$ カプセル化 --infd 0 --duplex 5
r$ カプセル化 --DUPLEX 5 --outfd 1
--infd 対応するものが必要です --outfd リモートエンドで。 故障しており、
チャネルが正しく割り当てられず、プロトコル エラーが発生します。
ソースコードを理解していれば カプセル化、これらのガイドラインに違反することはできますが、
それは不必要で、エラーが発生しやすく、賢明ではありません。 その上、あなたは本当に理解していません
ソースコード。 やらないでください。
クライアント -VS- サーバ
SCP には暗黙の極性があります。 一方がサーバーで、もう一方がクライアントです。
を使用して、どちらの端がどちらであるかを指定できます - クライアント - サーバ. 指定しない場合
一つ、それから カプセル化 ソケットの両端のアドレスを比較します (指定された
--fd) 決定論的アルゴリズムを使用して、XNUMX つをサーバーとして、もう XNUMX つをサーバーとして選択します。
クライアント。 ソケットのリモートアドレスがリモートに対応していない場合
カプセル化 (たとえば、パケットは接続されたゲートウェイを介して転送され、アドレスは
なりすましされているか、そうでなければ両端で矛盾して認識されている)
このアルゴリズムは「失敗」し、両方をサーバーに割り当てるか、両方をサーバーに割り当てる可能性が高くなります。
クライアントになる。
あなたが許すべき唯一の時 カプセル化 クライアントとサーバーのどちらかを選択
インタラクティブな状況。 ソフトウェアシステムが構築されている可能性が非常に高い カプセル化
自動極性割り当てが失敗した状況で再利用されます。
例
簡単なファイル転送デーモンを次に示します。
サーバー$ 蛇口 3001 --once --fd3 \
sh -c 'ながら ~/src/netpipes4.0/カプセル化 --fd 3 -so5i4 \
sh -c "fname=`cat 0<&4`; echo \$fname; cat < \$fname 1>&5"; \
真実を行います。 終わり'
client$ ホース サーバー 3001 --retry 10 --delay 1 --fd3 \
sh -c 'while read fname; 行う \
~/src/netpipes4.0/カプセル化 --fd 3 -si4o5 \
sh -c "echo $fname 1>&5; exec 5>&-; cat 0<&4" \
|| 壊す; 終わり'
取得するファイルの名前をホースに入力し、Return キーを押すだけです。 これ
stdout にダンプされます。 啓発されるか退屈するまで繰り返します。
トラブルシューティング
指定しましたか - クライアント - サーバ ちゃんと? 一方はサーバー、もう一方はサーバーにする必要があります
クライアントである必要があります。 両方をサーバーとして、または両方をクライアントとして指定すると、
間違い。 自動極性検出に依存しないでください。 理論的には
非常に優れたアルゴリズムですが、非常に簡単にだまされます。
すべてのチャネル割り当てを実行します (--infd 他)一致する? これらを間違えると、
カプセル化 びっくりして、靴全体にスプージが滴り落ちます。
デッドロックを回避するために、必要のないときにチャネルを閉じていることを確認してください
もう。 >&- リダイレクト演算子を sh または bash で使用します。 必ずすべて閉じてください
バックグラウンドプロセスも同様です。
& でバックグラウンド化されたプロセスから stdin を読み取れませんか? Bash はファイルを閉じます
バックグラウンド化されたサブプロセスの記述子 0 (例: (command&) )。 得られる
これを回避するには、0 を別の記述子にコピーしてから、それを
バックグラウンド処理。
( ( 猫 0<&3 ) & ) 3<&0
onworks.net サービスを使用してオンラインでカプセル化を使用する