我希望UDP回显服务器获取数据包,并确切地答复它收到的内容。我怎样才能简单地使用netcat
or 做到这一点socat
?它应该永远保持生命,并处理来自多个主机的数据包。
我希望UDP回显服务器获取数据包,并确切地答复它收到的内容。我怎样才能简单地使用netcat
or 做到这一点socat
?它应该永远保持生命,并处理来自多个主机的数据包。
Answers:
我曾经socat -v PIPE udp-recvfrom:5553,fork
运行服务器和socat - udp:localhost:5553
客户端。
这是一个很大的帮助!
socat TCP4-LISTEN:2000,fork EXEC:cat
您还可以将socat(而不是使用netcat)用作回显服务器,并将netcat用作客户端。
Socat回显服务器(侦听TCP端口1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Netcat客户端(通过TCP端口1234连接到serverip):
nc serverip 1234
您可以编写一个分叉 的C程序,nc -u -l -p 4321
然后使用dup(2)进行连接:
然后,在一个无穷循环中,父级从stdin读取并在stdout中写入任何父级读取的内容。
socat -v PIPE UDP-LISTEN:5555,fork
,但是第二个连接被拒绝。顺便说一句,它与TCP-LISTEN一起正常工作。我避免代码,否则我可以把它写在所有C.
如果您在Windows上运行并且使用cygwin之类的unix之类的环境,则netcat migth不提供-e参数。这对我来说很好。
netcat
已预先安装在Ubunutu中的解决方案
在netcat
预先安装在Ubuntu 16.04来源于netcat-openbsd
,并没有-c
选择权,但手册提供了一个解决方案:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
再以客户为例:
echo abc | netcat localhost 8000
TODO:如何修改输入的字符串值?以下内容不返回任何回复:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
但是,远程外壳程序示例有效:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
我不知道如何简单地处理并发请求。