我希望在 UDP 数据包中只发送一个短值,但是要运行命令
echo -n "hello" | nc -4u localhost 8000
我可以看到服务器正在获取 你好内容,但是我必须按 Ctrl + c退出 netcat 命令。
我怎样才能让它退出后发送 你好?
对不起,为了噪音,我重新阅读了手册页,找到了 -q选项。
-q
echo -n "hello" | nc -4u -q1 localhost 8000
工作(1秒后退出)。
由于某些原因,它不与 -q0工作。
-q0
我没有找到我的网络猫的 -q1选项。相反,我使用了 -w1选项。下面是我用来向任何主机和端口发送 udp 包的 bash 脚本:
-q1
-w1
#!/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选项发送只有一个数据包和退出。 您应该使用以下命令:
-w 0
echo -n "hello" | nc -4u -w0 localhost 8000