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 をのprocB
stdinに送信したいと考えています。このすべてでの私の期待は、 HostAの出力が HostB に表示され、HostB の出力が HostA に表示されることです。procB
procA
nc
[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??>
ノート:
- HostB でポート 4000 が開いていることを確認しました。
- 次のような単方向通信は機能しているようです。
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
さて、バイナリで有効になっている場合に何らかの方法で使用できるnc
INSECURE オプションが付属していることはわかっていますが、使用可能なオプションがない場合、2 つのリモート プロセスを を介して相互に接続するにはどうすればよいですか? 基本的に、上記のどこで間違っていますか?上記で示した場所に出力がないのはなぜですか? よろしくお願いします。-e
nc
-e
nc