如果我运行一个像这样的简单 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。退出。