在具有有线和无线接口(例如192.168.1.x和192.168.2.x子网)的Linux系统上,我要发送UDP广播,该广播通过所有可用接口(即通过有线和无线接口)发送)。
当前,我将sendto()发送到INADDR_BROADCAST,但是似乎广播仅通过其中一个接口发送(并不总是相同的,后续广播可能使用另一个接口)。
有没有一种方法可以发送通过每个接口发送的UDP广播?
首先,您应该考虑过时的广播,特别是INADDR_BROADCAST
(255.255.255.255)。您的问题恰恰突出了广播不适合的原因之一。它应该与IPv4一起消失(希望如此)。请注意,IPv6甚至没有广播的概念(而是使用多播)。
INADDR_BROADCAST
仅限于本地链接。如今,唯一可见的用途是用于DHCP自动配置,因为此时,客户端尚不知道客户端连接到哪个网络。
使用single时sendto()
,仅生成一个数据包,而传出接口由操作系统的路由表(ip route
在Linux上)确定。您不能一次sendto()
生成一个以上的数据包,您必须在所有接口上进行迭代,并使用原始套接字或将套接字绑定到用于setsockopt(..., SOL_SOCKET, SO_BINDTODEVICE, "ethX")
绕过OS路由表发送每个数据包的设备(这需要root特权) 。不是一个好的解决方案。
相反,由于INADDR_BROADCAST
无论如何都不路由,因此可以通过遍历每个接口并将数据包发送到其广播地址来实现几乎相同的目的。例如,假设您的网络具有255.255.255.0(/
24)掩码,则广播地址为 192.168.1.255 和 192.168.2.255
。给sendto()
这些地址中的每一个打电话一次,您就可以实现自己的目标。
编辑: 固定有关的信息INADDR_BROADCAST
,并以补充信息SO_BINDTODEVICE
。
我们现有的软件定期向本地子网(X.X.X.255)上的特定端口(7125)广播UDP数据包。我们的监控软件运行在HP-UX(11.11)上,可以接收这些数据包,没有问题。然而,在将监控软件移植到Linux(RHEL6.1)之后,我们发现它并没有接收到广播数据包。tcpdump显示了到达Linux主机的数据包,但内核不会将它们发送给我们的软件。 我使用了几个Python2.x脚本,这些脚本模拟了监控
我们所有的例子这一点利用传输方式称为“单播”:“将消息发送给一个网络拥有唯一地址的目的地”,这种模式支持连接和无连接协议。 然而,UDP 提供了额外的传输模式对多个接收者发送消息: 多播:传送给一组主机 广播:传送到网络上的所有主机(或子网) 示例应用程序在本章将说明使用 UDP 广播发送消息,可以接收到所有主机在同一网络。为此我们将使用特殊的“有限广播”或“零”网络地址255.255.255.2
我正在编写一个UDP客户端/服务器应用程序。服务器是广播服务器,它通过特定端口向同一子网上的两个客户端广播。每个客户端接收一个数据报,并向服务器发送一个响应。每个客户端都预先知道服务器的ip地址。 我的客户端基本上与http://man7.org/linux/man-pages/man3/getaddrinfo.3.html,的客户端示例相同,即它使用connect()函数来指定所有传出数据包的e
本章介绍 UDP 介绍 ChannelHandler, Decoder, 和 Encoder 引导基于 Netty 的应用 前面的章节都是在示例中使用 TCP 协议,这一章,我们将使用UDP。UDP是一种无连接协议,若需要很高的性能和对数据的完成性没有严格要求,那使用 UDP 是一个很好的方法。最著名的基于UDP协议的是用来域名解析的DNS。这一章将给你一个好的理解的无连接协议所以你能够做出明智的
问题内容: 我的机器上有三个接口,我想使用Java-API来获取mac地址。 我使用此代码。 但是该代码打印出来, 但是错过了eth0 。 我的操作系统Ubuntu,任何帮助。 更新资料 o / p().. blank(empty) 。 Java版本“ 1.7.0_21” Java™SE运行时环境(内部版本1.7.0_21-b11)JavaHotSpot(TM)64位服务器VM(内部版本23.21
我正在尝试接收通过LAN电缆连接的FPGA发送的UDP广播数据包。FPGA向端口5001发送连续数据包。 我的python接收器代码很简单: 我使用Wireshark进行了检查,发现PC接收数据包。但是,我的Python代码没有。我还检查了从另一个本地python代码发送数据包的情况(发送到相同的地址和端口),并且我的接收器获得了这些数据包。