使用nc(netcat)广播消息

Edw*_*ans 21 networking udp

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

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

  host: nc -l 192.168.1.121 12101
  client: echo "hello" | nc 192.168.1.121 12100
Run Code Online (Sandbox Code Playgroud)

但我无法得到这样的东西.

  host: nc -lu 0.0.0.0 12101
  client: echo "hello" | nc -u 255.255.255.255 12100
Run Code Online (Sandbox Code Playgroud)

我使用正确的旗帜吗?注意,主机在Mac上,而客户端在Linux上.你能给我一个用于广播消息的例子吗?

谢谢!

Rob*_*oun 20

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

我已经让socat上班了.下面的代码将UDP广播到端口24000.

socat - UDP-DATAGRAM:255.255.255.255:24000,broadcast
Run Code Online (Sandbox Code Playgroud)

(在socat-world中" - "表示"stdin".)


for*_*cve 7

你不是说要播放,这是使用/ 的-b选项完成的.ncnetcat

nc -h 2>&1 | grep -- -b
-b          allow broadcasts
Run Code Online (Sandbox Code Playgroud)


mas*_*ase 6

一个在 Ubuntu 上运行的简单示例。所有信息都在其他答案中,但我必须将其拼凑在一起,所以我想分享结果。

服务器

nc -luk 12101
Run Code Online (Sandbox Code Playgroud)

客户

echo -n "test data" | nc -u -b 255.255.255.255 12101
Run Code Online (Sandbox Code Playgroud)

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


小智 3

抱歉,如果我假设错误,但您提到您的防火墙设置正确,所以我猜测主机和客户端不在同一子网上???

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

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

希望有所帮助,如果内容冗长或偏离您正在寻找的内容,我们深表歉意:)