在玉簪,我有一个过程,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
将两个远程进程连接到彼此?基本上,我上面哪里出错了?为什么我在上面指出的地方没有输出?提前谢谢了。