На HostA у меня есть процесс, procA
, который выполняет ввод / вывод, например:
#!/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
. Во всем этом я ожидаю, что выходные данные HostA должны появиться на HostB, а выходные данные HostB должны появиться на HostA ... во многом так же, как в следующем каноническом 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??>
Примечания:
- Я убедился, что порт 4000 открыт на HostB.
- Однонаправленная связь, такая как следующая, , кажется, работает :
Вкл. 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 -e
, которую можно каким-то образом использовать, если она включена в вашем бинарном файле nc
, но, если у меня нет опции -e
, как Я соединяю 2 удаленных процесса друг с другом через nc
? В принципе, где я иду неправильно? Почему нет выхода в местах, которые я указал выше? Большое спасибо заранее.