在玉簪,我有一個過程,procA
,即執行I/O,就像這樣:如何通過netcat和fifo將2個遠程進程連接在一起?
#!/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
)。
現在,我想使用的netcat程序(/usr/bin/nc
)發送procA
的標準輸出到procB
的標準輸入,並procB
的標準輸出到procA
的標準輸入。我在這個所有人意料的是,主機A的輸出應該出現在主機B和主機B的輸出應該出現在主機A ...多會發生在以下規範nc
例如對等網絡聊天的:
[HostB]$ nc -l 4000
[HostA]$ nc HostB 4000
但是,當我試圖通過與進程procA
和procB
兩個主機代替人類延長上述典型的例子如下,它沒有工作:
在主機B:
$ mkfifo p
$ ./procB <p | nc -l 4000 >p
<WHY NO OUTPUT HERE??>
,並在主機A :
$ mkfifo p
$ ./procA <p | nc HostB 4000 >p
<WHY NO OUTPUT HERE??>
注:
- 我已經驗證端口4000是主機B上的開放。
- 單向通信,如下面似乎工作:
在主機B:
$ mkfifo p
$ ./procB <p | nc -l 4000 >p
在主機A:
$ ./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選項-e
,如果在您的nc
二進制文件中啓用了該選項,但可以採用某種方式,但假設我沒有-e
選項可用,如何通過nc
將兩個遠程進程連接到彼此?基本上,我上面哪裏出錯了?爲什麼我在上面指出的地方沒有輸出?提前謝謝了。