让 netcat 监听多个 UDP 数据包

让 netcat 监听多个 UDP 数据包

如果我运行一个像这样的简单 UDP 监听器:

nc -l -u -p 1234

然后我似乎只获取了第一个入站 UDP 数据包。例如,如果我运行:

$ echo abc | nc -u localhost 1234
  ["abc" appears in output of server as expected]

$ echo abc | nc -u localhost 1234
read(net): Connection refused

答案1

使用零超时 (0)

“服务器”:

nc -kluvw 0 localhost 9000

“客户”:

echo -e "all"     | nc -vuw 0 localhost 9000
echo -e "the"     | nc -vuw 0 localhost 9000
echo -e "udp"     | nc -vuw 0 localhost 9000
echo -e "packets" | nc -vuw 0 localhost 9000

结果:

Connection from 127.0.0.1 port 9000 [udp/*] accepted
all
Connection from 127.0.0.1 port 9000 [udp/*] accepted
the
Connection from 127.0.0.1 port 9000 [udp/*] accepted
udp
Connection from 127.0.0.1 port 9000 [udp/*] accepted
packets

已测试:

uname -a
Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux

答案2

我找到了一个可能对你有帮助的链接:netcat:UDP 行为异常 – 仅接收发送的第一个数据包

在这个阶段,我不确定该怎么做,但 Nathan 指出,如果我利用客户端和服务器上的超时,那么就有可能发送多个 UDP 数据包。

我重新启动了 netcat 服务器,但这次超时了 1 秒:

$ nc -kluvw 1 localhost 9000

然后开始从 netcat 客户端发送 UDP 数据包,超时时间为 1 秒:

 $ echo -e "all" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "the" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "udp" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "packets" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!

现在 netcat 服务器已经接收了所有信息:

$ nc -kluvw 1 localhost 9000
XXXXall
XXXXthe
XXXXudp
XXXXpackets

这是一个有趣的问题,希望它能回答你的问题。

答案3

要监控 UDP 端口,你可以尝试

netcat -lzu -p 9000

# -z, --zero                 zero-I/O mode (used for scanning)

这在我的 GNU netcat 0.7.1 中有效。

答案4

我目前得到:

Ncat:版本 7.50(https://nmap.org/ncat) Ncat:UDP 模式不支持 -k 或 --keep-open 选项,除非使用 --exec 或 --sh-exec。退出。

相关内容