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

Jan*_*e H 110 udp netcat

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

echo -n "hello" | nc -4u localhost 8000
Run Code Online (Sandbox Code Playgroud)

我可以看到服务器正在获取hello的东西,但我必须按Ctrl+ c退出netcat命令.

发送问候后如何让它退出?


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

 echo -n "hello" | nc -4u -q1 localhost 8000
Run Code Online (Sandbox Code Playgroud)

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

由于某种原因,它无法使用-q0.

Pet*_*aut 188

如果你正在使用bash,你不妨写一下

echo -n "hello" >/dev/udp/localhost/8000
Run Code Online (Sandbox Code Playgroud)

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

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

echo -n "hello" >/dev/udp/remotehost/8000
Run Code Online (Sandbox Code Playgroud)

这些不是文件系统上的"真实"设备,而是bash"特殊" 别名.

  • 好的,你是对的,让我明确表示这不适用于ZSH. (19认同)
  • 出于某种原因,我需要在Ubuntu 14.04上的`localhost`上使用`127.0.0.1`.(是的,我在`/ etc/hosts`中有`localhost`.) (4认同)
  • 这可能是我见过的最神奇的事情. (3认同)
  • `/ dev/udp /`不是真正的文件.它只是bash专门解释的文件名. (3认同)

Tra*_*ago 46

-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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,对我来说OSX也是`-w0`工作正常. (4认同)

Sim*_*mon 9

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

-c, --close                close connection on EOF from stdin
Run Code Online (Sandbox Code Playgroud)

因此,

echo "hi" | nc -cu localhost 8000
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

  • 需要注意的是,这仅适用于GNU netcat,但不适用于BSD netcat. (3认同)

小智 6

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

echo -n "hello" | nc -4u -w0 localhost 8000
Run Code Online (Sandbox Code Playgroud)


Eva*_*van 5

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

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

  • 我认为这只适用于TCP.使用UDP,它将在一个数据包中发送多行(如果它们适合). (3认同)
  • 不需要。只需测试 `echo -n "hello\nworld" >/dev/udp/localhost/514` 你就会得到 2 行 (2认同)