如何发送只有一个 UDP 数据包与网络猫?

我希望在 UDP 数据包中只发送一个短值,但是要运行命令

echo -n "hello" | nc -4u localhost 8000

我可以看到服务器正在获取 你好内容,但是我必须按 Ctrl + c退出 netcat 命令。

我怎样才能让它退出后发送 你好


对不起,为了噪音,我重新阅读了手册页,找到了 -q选项。

 echo -n "hello" | nc -4u -q1 localhost 8000

工作(1秒后退出)。

由于某些原因,它不与 -q0工作。

254411 次浏览

我没有找到我的网络猫的 -q1选项。相反,我使用了 -w1选项。下面是我用来向任何主机和端口发送 udp 包的 bash 脚本:

#!/bin/bash


def_host=localhost
def_port=43211


HOST=${2:-$def_host}
PORT=${3:-$def_port}


echo -n "$1" | nc -4u -w1 $HOST $PORT

如果您正在使用 bash,那么不妨编写

echo -n "hello" >/dev/udp/localhost/8000

并且避免所有 Netcat 的特质和不兼容性。

这也可以发送到其他主机,例如:

echo -n "hello" >/dev/udp/remotehost/8000

这些不是文件系统上的“真实”设备,而是 bash“特殊”化名

Netcat 每行发送一个数据包。所以你没事。如果你做更复杂的事情,那么你可能需要别的东西。

当我意识到这一点的时候,我正在和 Wireshark 鬼混。不知道这是否有帮助。

在当前的 netcat (v0.7.1)上,有 a-c 开关:

-c, --close                close connection on EOF from stdin

因此,

echo "hi" | nc -cu localhost 8000

应该能行。

我有同样的问题,但我使用 -w 0选项发送只有一个数据包和退出。 您应该使用以下命令:

echo -n "hello" | nc -4u -w0 localhost 8000