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

时间:2012-03-14 04:52:39

标签: 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

5 个答案:

答案 0 :(得分:173)

如果你正在使用bash,你也可以写

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

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

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

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

这些不是文件系统上的“真实”设备,而是bash“special”aliases

答案 1 :(得分:46)

我在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

答案 2 :(得分:8)

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

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

因此,

echo "hi" | nc -cu localhost 8000

应该这样做。

答案 3 :(得分:5)

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

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

答案 4 :(得分:3)

我遇到了同样的问题,但是我使用fb://faceweb/f?href=https%3A%2F%2Fm.facebook.com%2Fsharer.php%3Fu%3Dhttp%3A%2F%2Fwww.google.com fb://faceweb/f?href={{urlencoded sharer.php url}} 选项仅发送一个数据包并退出。 您应该使用以下命令:

-w 0