使用netcat或socat的echo服务器


18

我希望UDP回显服务器获取数据包,并确切地答复它收到的内容。我怎样才能简单地使用netcator 做到这一点socat?它应该永远保持生命,并处理来自多个主机的数据包。


7
请不要使此东西可通过互联网访问。由于它是基于UDP的,因此可以用于使用源伪造的数据包将数据包流发送到任意目的地。
埃文·安德森

Answers:


17

另一个类似于netcat的工具是nmap版本,该版本ncat具有许多内置的好东西,可以简化此类操作。这将工作:

ncat -e /bin/cat -k -u -l 1235

-e表示执行/ bin / cat(回显您键入的内容)
-k表示保持活动状态,表示在每次连接后继续监听
-u表示udp
-l 1235表示监听端口1235



6

您还可以将socat(而不是使用netcat)用作回显服务器,并将netcat用作客户端。

Socat回显服务器(侦听TCP端口1234):

socat -v tcp-l:1234,fork exec:'/bin/cat'

Netcat客户端(通过TCP端口1234连接到serverip):

nc serverip 1234

2

您可以编写一个分叉 的C程序,nc -u -l -p 4321然后使用dup(2)进行连接:

  • nc stdin与父母的标准输出
  • nc stdout和父母的stdin

然后,在一个无穷循环中,父级从stdin读取并在stdout中写入任何父级读取的内容。


我可以使用socat -v PIPE UDP-LISTEN:5555,fork,但是第二个连接被拒绝。顺便说一句,它与TCP-LISTEN一起正常工作。我避免代码,否则我可以把它写在所有C.
穆罕默德Hedayati

您必须将整个事情包装成一个无休止的循环:做东西 完成
adamo 2012年

您也可以使用得到一些启示本教程中
阿达莫


0

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

我不知道如何简单地处理并发请求。

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.