netcat作为多线程服务器


12

我使用netcat运行这样的简单服务器:

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

这样,任何人都可以在端口2468上连接到我的主机并与“ my_exe”对话。
不幸的是,如果其他人想在打开的会话期间进行连接,则会收到“连接被拒绝”错误,因为netcat不再侦听下一个“ while”循环。

有没有办法使netcat像多线程服务器一样工作,即始终在侦听传入的连接?如果没有,是否有一些解决方法?


您可以使用socat
sivann

Answers:


18

您正在使用错误的工具来执行此任务:使用类似ucspi-tcp之类的东西,尤其是tcpserver

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

2
我这辈子在哪里?
Sridhar Sarnobat

谢谢@akira,您能提供例子吗?
Sabrina

3

尽管您没有提到要使用的操作系统,但根据shell命令示例的语法,我将假定它是Linux还是Unix。

如果您的系统正在运行xinetd(或其前身inetd),则可以使用该软件在您选择的端口上侦听连接,然后运行可执行文件以进行响应。使用xinetd / inetd,您可以选择允许多个并发连接,每个并发连接由可执行文件的单独实例提供。


-2

您可能只是使用“&”作为后台进程(然后在进入下一个循环之前,它不等待返回),例如:

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

7
这将产生大量子
进程

5
并且,只有第一个调用才有效;每个成功的主机都会失败,因为端口2468上已经有服务器套接字。–
Daniel Griscom,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.