使用nc (netcat)广播消息

27

我正在尝试使用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上。你能给我一个有效广播消息的例子吗?

谢谢!


1
我来这里是为了让busybox nc执行UDP广播。使用-v选项后,它告诉我不允许广播。在connect_w_timeout(netfd);调用之前添加setsockopt_broadcast(netfd);后,一切都正常工作了。 - Keeely
4个回答

24

GNU版本的netcat可能存在问题。(至少在0.7.1版本下我无法让它工作。)请参见http://sourceforge.net/p/netcat/bugs/8/

我已经成功运行了socat。以下代码将进行到端口24000的UDP广播。

socat - UDP-DATAGRAM:255.255.255.255:24000,broadcast

(在socat-world中,“-”表示“stdin”。)


1
如果您需要指定源端口,只需在末尾添加“,sourceport = 1001”。 - sucotronic

9

您并没有说您想要广播,广播是使用-b选项来执行的,这个选项是由nc/netcat提供的。

nc -h 2>&1 | grep -- -b
-b          allow broadcasts

1
你正在使用哪个版本的netcat?macOS的nc和busybox都没有这个标志... - Christian Ulbrich
Linux上的标准工具是请求者所要求的。 macOS通常有些古怪。 busybox包含了非常基本的一部分工具。 - fork2execve
@fork2execve 没有“标准”的 nc。Linux 有一个版本,BSD 有另一个版本。两者都不会出现问题。 - fuz

6

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

服务器

nc -luk 12101

客户端

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

客户端会一直挂起,直到您按下Ctrl-C。

非常好,应该是正确的答案! - Karl Zeilhofer
Ncat: UDP mode does not support the -k or --keep-open options, except with --exec or --sh-exec. QUITTING. - Cilyan

3
抱歉,如果我猜错了,请告诉我。您提到您的防火墙已经正确设置,所以我猜主机和客户端不在同一个子网中?如果是这种情况,并且这个防火墙也作为路由器(或者数据包必须通过路由器),那么它将处理该数据包,但不会将其转发到其他接口。如果您想要发生这种情况,那么您需要发送有向广播。例如:对于子网192.168.1.0/24,有向广播将是192.168.1.255,即子网中的最后一个IP地址。然后,假设防火墙已经路由到192.168.1.0/24并且设置为转发定向广播,则会将该广播转发到目标或下一跳。配置设备以转发有向广播...您需要参考其文档。对于Cisco IOS,您需要在接口下键入“ip directed-broadcast”。
255.255.255.255是有限广播,无论如何都无法通过您的路由器,它仅适用于它所在的第2层链路。
至于netcat的设置:
-l 0.0.0.0 12101,告诉netcat在所有启动并分配了IP地址的接口上监听端口12101。-u不需要,因为它告诉netcat在unix域套接字上侦听,谷歌IPC :)(这是您的方案无法正常工作的最大原因)。
下面应该可以通过netcat将广播转发到另一个网络:
服务器:nc -l 0.0.0.0 12101 主机:echo "hello" | nc 192.168.1.255 12101
希望这可以帮助您,如果我说得太多或与您要求的不符,请见谅 :)

1
-u 是 UDP。-U 是 Unix 套接字(在支持它的版本中)。 - Tasos Bitsios
向特定的IP地址发送消息并不是广播。 - SubMachine
1
192.168.1.255 不是特定的地址 :) - PovilasB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接