如何使用netcat仅发送一个UDP数据包?

如何使用netcat仅发送一个UDP数据包?,udp,netcat,Udp,Netcat,我只想在UDP数据包中发送一个短值,但运行命令 echo -n "hello" | nc -4u localhost 8000 我可以看到服务器正在接收hello内容,但我必须按Ctrl+c退出netcat命令 我怎样才能让它在发送hello后退出 抱歉,由于噪音,我重新阅读了手册页,找到了-q选项 echo -n "hello" | nc -4u -q1 localhost 8000 工作(1秒钟后退出) 由于某些原因,它不适用于-q0我在netcat上找不到-q1选项。相反,我使用了

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

echo -n "hello" | nc -4u localhost 8000
我可以看到服务器正在接收hello内容,但我必须按Ctrl+c退出netcat命令

我怎样才能让它在发送hello后退出


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

 echo -n "hello" | nc -4u -q1 localhost 8000
工作(1秒钟后退出)


由于某些原因,它不适用于
-q0

我在netcat上找不到
-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)上,您有一个-c开关:

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

echo "hi" | nc -cu localhost 8000

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

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

好吧,你是对的,让我明确地说,这对ZSH不起作用。这比用netcat捣乱要好得多。谢谢你的提示!这可能是我见过的最令人惊讶的事情。出于某种原因,我需要在Ubuntu 14.04的
localhost
上使用
127.0.0.1
。(是的,我在
/etc/hosts
中确实有
localhost
/dev/udp/
不是真实的文件。这只是一个由bash专门解释的文件名。我认为这只适用于TCP。使用UDP,它将在一个数据包中发送多行数据(如果合适的话)。否。只需测试echo-n“hello\nworld”>/dev/udp/localhost/514,您将在debian上获得2个线条员页面:
-q秒:在stdin上执行EOF后,等待指定的秒数,然后退出。如果秒数为负数,请永远等待。
OSX的工作原理是:“echo-n”测试“| nc-4u-w0localhost 9999”,正如SimonW所说。需要注意的是,这仅适用于GNU netcat,而不适用于BSD netcat。为清楚起见,对于基于Linux的netcat,-c选项需要一个命令作为参数,“通过/bin/bash执行给定的参数”-nc 1.10-41+b1不接受
-w0
。错误:无效的等待时间0