LINUX.ORG.RU

Замена STDIN для netcat


0

1

Всем привет, пытаюсь решить проблему с неткатом, не могу направить в него данные

суть в том что отправить файл nc не проблема, а вот постоянно читать и передавать через nc не получается.

Например, перенаправляем stdin и stdout в пайпы

mkfifo one.pipe two.pipe

nc -l -p 1234 > one.pipe < two.pipe

оно заводится но невозможно приконнектиться

nc localhost 1234

netbook [127.0.0.1] 1234 (?) : Connection refused

если убрать перенаправление stdin то все работает подскажите пожалуйста что делаю не так ...

Дело в шелле. Если посмотришь в вывод ps, увидишь, что первый nc (тот, что должен слушать) на самом деле ещё запущен.

А запускается он шеллом только когда и во входном пайпе есть данные, и выходной пайп кто-то читает. Почему так, не скажу, никогда толком не пользовался именованными пайпами.

$ mkfifo in out
$ nc -l -p 1234 <in >out &
[1] 18631
$ nc -v 127.0.0.1 1234
nc: connect to 127.0.0.1 port 1234 (tcp) failed: Connection refused
$ echo test >in
$ nc -v 127.0.0.1 1234
nc: connect to 127.0.0.1 port 1234 (tcp) failed: Connection refused
$ cat out &
[2] 18759
$ nc -v 127.0.0.1 1234
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!
test
[1]-  Done                    nc -l -p 1234 < in > out
[2]+  Done                    cat out
$ 
unterwulf
()
Ответ на: комментарий от unterwulf

Да, дествительно, так получилось приконнектиться на nc, но заппись чего либо в пайп in после коннекта

echo hello > in

не работает, теряется смысл пайпа in.

zloikakpes
() автор топика
Ответ на: комментарий от zloikakpes

Для этого удобнее socat-ом пользоваться.

$ cat >echo.sh 
#!/bin/sh
printf response:
cat
$ while :; do socat TCP-LISTEN:1234 EXEC:./echo.sh; done
$ echo test | nc 127.0.0.1 1234
response:test
unterwulf
()
Ответ на: комментарий от unterwulf

Этот вариант ответит и разорвет сессию

Помоему решил проблему так:

$ cat >echo.sh
#!/bin/bash
while read message; do
	echo "server>$message"
done

$nc -l 1234 -e echo.sh
$nc localhost 1234
zloikakpes
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.