25

我正在尝试使用 netcat 发送广播消息。

我打开了防火墙并发送这样的常规消息对我有用:

  host: nc -l 192.168.1.121 12101
  client: echo "hello" | nc 192.168.1.121 12100

但我无法让这样的事情发挥作用。

  host: nc -lu 0.0.0.0 12101
  client: echo "hello" | nc -u 255.255.255.255 12100

我使用了正确的标志吗?请注意,主机在 Mac 上,客户端在 Linux 上。你能给我一个适用于广播消息的例子吗?

谢谢!

4

4 回答 4

23

GNU 版本的 netcat 可能已损坏。(无论如何我都无法在 0.7.1 下工作。)请参阅http://sourceforge.net/p/netcat/bugs/8/

我已经让 socat 工作了。下面的代码将 UDP 广播到端口 24000。

socat - UDP-DATAGRAM:255.255.255.255:24000,broadcast

(在 socat 世界中,“-”的意思是“标准输入”。)

于 2013-10-24T18:21:02.220 回答
9

您并不是说要广播,这是使用/-b选项完成的。ncnetcat

nc -h 2>&1 | grep -- -b
-b          allow broadcasts
于 2016-12-02T21:58:53.960 回答
4

一个适用于 Ubuntu 的简单示例。中的所有信息都在其他答案中,但我必须将它们拼凑在一起,所以我想我会分享结果。

服务器

nc -luk 12101

客户

echo -n "test data" | nc -u -b 255.255.255.255 12101

客户端将挂起,直到您执行 Ctrl-C

于 2020-08-02T13:18:23.540 回答
3

对不起,如果我假设错了,但你提到你的防火墙设置正确,所以我猜主机和客户端不在同一个子网上???

如果是这种情况,并且该防火墙还充当路由器(或者如果数据包必须通过路由器),那么它将处理该数据包,但不会将其转发到其他接口。如果您希望这种情况发生,那么您需要发送定向广播。例如; 对于子网 192.168.1.0/24,定向广播将是 192.168.1.255,即子网中的最后一个 IP。然后防火墙,假设它有一个到 192.168.1.0/24 的路由并且它被设置为转发定向广播,就会将该广播转发到目的地或下一跳。将您的设备配置为转发定向广播...您需要参考其文档。对于 Cisco IOS,您可以在界面下键入“ip 定向广播”。

255.255.255.255 是有限广播,无论如何都不会通过您的路由器,它仅用于它所在的第 2 层链路。

至于netcat是如何设置的:

-l 0.0.0.0 12101,告诉 netcat 在所有启动并分配 IP 地址的接口上侦听端口 12101。-u 不需要,因为它告诉 netcat 侦听 unix 域套接字,google IPC :) (这是您的方案不起作用的最大原因。)

下面应该可以通过 netcat 将广播转发到另一个网络:

服务器:nc -l 0.0.0.0 12101
主持人:回声“你好” | 数控 192.168.1.255 12101

希望对您有所帮助,对不起,如果那是冗长的或与您正在寻找的东西不符:)

于 2012-11-09T00:56:22.567 回答