LINUX.ORG.RU

специалистам по netcat


1

1

Подозреваю, что однострочником c nc можно добиться желаемого: есть два клиента, которые по идее должны соединяться с одним сервером. Первый клиент постоянно соединён с ним, а второй соединяется только чтобы отправить короткое plain text сообщение первому. То есть нужно что-то вроде прокси, который пересылает текст с одного порта на другой. Буду благодарен за любой совет, главное, чтобы это сразу работало, потому что это срочно, а потом будет переписано на C.



Последнее исправление: log10 (всего исправлений: 1)

Я, конечно, понял, что это netcat, но у меня до сих пор nc вызывает стойкую ассоциацию с нортон коммандером.

По сабжу: помести пару вызовов nc в цикл шелл-скрипта.

post-factum ★★★★★
()
Ответ на: комментарий от AITap
while true; do
nc -q 1 -l -p 12345 | nc -q 1 127.0.0.1 12346
done

Я правильно понимаю, что в этом случае первый клиент (с непрерывным соединением) висит на порте 12346, а тот, который шлёт ему сообщения - подключается к порту 12345?

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

«Второй» клиент подключается к «первому» на порт 12345, «первый» к «большому» - на адрес 127.0.0.1, порт 12346.

AITap ★★★★★
()

Но ведь можно сразу написать две небольшие программулины на С, зачем эта возня со мной?

netcat ★★
()
Ответ на: комментарий от netcat

зачем писать две програмулины на си, если уже есть гибкое и удобное средство? или кто больше велосипедов наклепает?

suslik
()

Сервер:

touch messages; tail -n0 -f messages | nc -lp $PORT2& while [ "$?" -eq 0 ]; nc -lp $PORT1 >> messages; done

Клиент 1:

nc $SERVER $PORT2

Клиент 2:

echo $MESSAGE | nc $SERVER $PORT1

Можно сделать и на 1 порте, но тогда порядок подключения будет важен

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

Что-то не работает. (Клиент 2:) (UNKNOWN) [$SERVER] $PORT1 (?) : Connection refused

Но уже написали временный костыль на питоне.

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

В коде сервера и второго клиета была опечатка.

Фиксы:

Сервер

rm messages && touch messages; tail -n0 -f messages | nc -lp $PORT2& while [ "$?" -eq 0 ]; nc -lp $PORT1 >> messages; done

Клиент1

nc $SERVER $PORT2

Клиент2

echo $MESSAGE | nc $SERVER $PORT1 -q 5

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

Вот еще более продвинутый сервер, возможен реконнект первого клиента:

touch messages; while [ "$?" -eq 0 ]; do tail -n0 -f messages | nc -lp $PORT2; done& while [ "$?" -eq 0 ]; do nc -lp $PORT1 >> messages; done
suslik
()

слушателей лучше при помощи inted/xinetd реализовывать

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.