136

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

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

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

发送hello后如何让它退出?


抱歉,由于噪音,我重新阅读了手册页并找到了该-q选项。

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

工作(它在 1 秒后退出)。

出于某种原因,它不适用于-q0.

4

5 回答 5

226

如果你使用 bash,你不妨写

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

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

这也适用于发送到其他主机,例如:

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

这些不是文件系统上的“真实”设备,而是 bash “特殊”别名Bash 手册中有更多信息。

于 2013-05-15T15:12:05.120 回答
48

我没有-q1在我的 netcat 上找到该选项。相反,我使用了该-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
于 2012-12-04T19:19:56.273 回答
14

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

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

因此,

echo "hi" | nc -cu localhost 8000

应该做的伎俩。

于 2017-07-21T14:15:07.307 回答
8

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

echo -n "hello" | nc -4u -w0 localhost 8000
于 2018-07-09T05:59:08.437 回答
5

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

当我意识到这一点时,我正在和 Wireshark 胡闹。不知道有没有帮助。

于 2013-05-25T02:10:43.480 回答