我遇到过这样的情况:许多“智能”设备通过 UDP 向我发送数据。我无法更改发送端的任何内容。
我正在测试 nc (或 netcat),但无法通过以下内容:
接收结束命令:
nc -l -u 8123
测试发送命令:
echo "test" | nc -u 127.0.0.1 8123
第一个数据包工作正常,但两端似乎都进入了某种睡眠状态,我必须CTRL再次C尝试。一旦它起作用,我将使接收端“继续监听”(-k),然后我将处理数据包
答案1
答案是,如果出现的话 - netcat 在像这样使用时显然存在一些问题 - socat 提供了一个解决方案:
收到:
socat -u udp4-recv:8123 -
发送:
echo "test" | socat - udp4-sendto:127.0.0.1:8123
答案2
服务器端:nc -ul 127.0.0.1 1234
- 监听端口 1234 上的 udp 连接
还:nc -l 1234
客户端:nc -u 127.0.0.1 1234
- 使用 udp 连接到 127.0.0.1,端口 1234
现在在客户端输入一些内容,您就会在服务器端看到它。 (您也可以在服务器端键入,它会发送到客户端。)
当您这样做时echo "test" | nc -u 127.0.0.1 8123
,服务器端保持像以前一样,但现在nc
客户端的标准输入绑定到管道描述符。当你在键盘上打字时,它无处可去。nc
正在等待来自管道的输入,并且管道已经发送了它必须发送的所有内容。所以现在nc
是“冻结”了。
答案3
根据手册页,您需要传递标志-q0
以nc
使其在完成后退出。
答案4
我试图测试一些 DNS 东西,但我缺少的是标志-d
。完整命令,nc
在 Ubuntu 22.04 上使用 BSD:
nc -d -l -q 0 -u 127.0.0.1 8123
添加-v
用于通过 stderr 进行调试。