netcat як багатопотоковий сервер


12

Я використовую netcat для запуску простого сервера на зразок цього:

while true; do nc -l -p 2468 -e ./my_exe; done

Таким чином, кожен може підключитися до мого хоста на порту 2468 і поговорити з "my_exe".
На жаль, якщо хтось інший хоче підключитися під час відкритого сеансу, він отримає помилку "З'єднання відмовлено", оскільки netcat вже не слухає до наступного циклу "while".

Чи є спосіб змусити netcat вести себе як багатопотоковий сервер, тобто завжди при прослуховуванні вхідних з'єднань? Якщо ні, чи існують певні шляхи для цього?


Ви можете використовувати socat
sivann

Відповіді:


18

ви використовуєте неправильний інструмент для виконання завдання: використовуйте щось на кшталт ucspi-tcp , особливо tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

2
Де це було все життя ?!
Шрідхар Сарнобат

Дякую @akira, ти можеш навести приклад?
Сабріна

3

Хоча ви не згадали про операційну систему, яку ви використовуєте, я вважаю, що це Linux або Unix на основі синтаксису прикладу вашої команди оболонки.

Якщо у вашій системі працює xinetd (або її попередник inetd ), ви можете використовувати це програмне забезпечення для прослуховування з'єднання на обраний порт та запустити виконуваний файл для відповіді. За допомогою xinetd / inetd у вас є можливість дозволити кілька одночасних з'єднань, кожне з яких подається окремим екземпляром вашого виконуваного файлу.


-2

ви можете, ймовірно, просто фоновий процес (тоді він не чекає повернення, перш ніж перейти до наступного циклу) із знаком "&", наприклад:

while true; do nc -l -p 2468 -e ./my_exe &; done

7
Це збирається породжувати навантаження підпроцесів і
руйнувати

5
І лише перша виклик спрацює; кожен успішний не вдасться, тому що в порту 2468 вже є розетка сервера
Daniel Griscom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.