1

HostA には、次のprocAように I/O を行うプロセス があります。

#!/bin/bash
while sleep 1 ; do
  # Consume input *if available*
  if read -t 0.5 x; then  # a timed-read
    # If input is available, output it.
    echo "HostA Input: $x"
  fi

  # Produce some output.
  echo "HostA Output: $(date)"
done

HostB では、非常によく似たプロセスがありますprocBが、唯一の違いはprocB、入力/出力にHostB(プレフィックスではなくHostA) プレフィックスをタグ付けすることです。

/usr/bin/ncここで、netcat プログラム ( ) を使用して、 の stdout を の stdin に送信し、procAの stdout をのprocBstdinに送信したいと考えています。このすべてでの私の期待は、 HostAの出力が HostB に表示され、HostB の出力が HostA に表示されることですprocBprocAnc

[HostB]$ nc -l 4000

[HostA]$ nc HostB 4000

しかし、両方のホストの人間を次のようにプロセスに置き換えて上記の正規の例を拡張しようとしたところ、procAうまくいきませんでした:procB

HostB:

$ mkfifo p
$ ./procB <p | nc -l 4000 >p
<WHY NO OUTPUT HERE??>

そして、HostAで:

$ mkfifo p
$ ./procA <p | nc HostB 4000 >p
<WHY NO OUTPUT HERE??>

ノート:

  1. HostB でポート 4000 が開いていることを確認しました。
  2. 次のような単方向通信は機能しているようです

HostB:

$ mkfifo p
$ ./procB <p | nc -l 4000 >p

HostA:

$ ./procA | nc HostB 4000 
HostB Output: Wed Jan 11 13:53:37 IST 2012
HostB Output: Wed Jan 11 13:53:39 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:02 IST 2012
HostB Output: Wed Jan 11 13:53:40 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:04 IST 2012
HostB Output: Wed Jan 11 13:53:41 IST 2012
HostB Input: HostA Output: Wed Jan 11 13:55:05 IST 2012
HostB Output: Wed Jan 11 13:53:42 IST 2012
^C

さて、バイナリで有効になっている場合に何らかの方法で使用できるncINSECURE オプションが付属していることはわかっていますが、使用可能なオプションがない場合、2 つのリモート プロセスを を介して相互に接続するにはどうすればよいですか? 基本的に、上記のどこで間違っていますか?上記で示した場所に出力がないのはなぜですか? よろしくお願いします。-enc-enc

4

1 に答える 1

0

上記の動作は実際には正しい動作ですが、私はそれが正しいとは認識していませんでした。

私が不満を言っているところはどこでも<WHY NO OUTPUT HERE??>、それは端末の標準出力がローカルの fifo にリダイレクトされたためです。(端末に何も表示されないのも不思議ではありません!)

さらに、上記の注 (2) では、通信が単方向であるということは実際には正しくありません。stdin と stdout が端末から fifo にリダイレクトされているため、HostB で出力が表示されないというだけで、非常に双方向です。したがって、HostA での の出力が正しく表示されます。これは、 HostBの入力として送信された HostAの出力に他なりません。procBprocAprocBprocB

わお!

編集: 各端末で実際に出力を表示するにはtee、次のように使用します。

HostB:

$ mkfifo p
$ ./procB <p | nc -l 4000 | tee p

HostA:

$ mkfifo p
$ ./procA <p | nc HostB 4000 | tee p
于 2012-01-12T06:09:40.003 に答える