我是高级networkingpipe理新手,我想用UDP广播做一些testing,所以我需要在我的环回接口上有一个广播地址 。 机器离线,换句话说,没有networking。
我怎么能通过ifconfig来完成,而不必在build议的注释中作为一个用户购买交换机。 在Linux中,我所要做的就是使用127.255.255.255,无需任何networking或交换机即可正常工作。 如果我有一个networking,我可以使用255.255.255.255,显然。
下面是你可以检查自己,它在Linux上,但不是在OS / X:
打开两个terminal并键入他们两个:
nc -u -l 55555
打开第三个terminal,如果需要的话安装socat并键入:( 如果你问netcat不支持广播 )
echo -n "TEST" | socat - udp-datagram:127.255.255.255:55555,broadcast
你应该看到两个terminal都收到这个消息。
如果您尝试使用127.0.0.1进行相同的实验,则只有一个terminal会按预期收到消息。
在OS X上执行相同的testing不会显示相同的行为。
如果可能的话,我正在寻找的是一个广播的软件解决方法。
我不能使用多播(它必须广播),我不能通过networking(机器脱机)testing。
您不要“添加”广播地址。 您将stream量引导至networking的广播地址 。
广播地址是一个完全虚拟的概念,在正常实践中不应该被“添加”或以其他方式分配给任何主机。
上述规则的例外是指定广播地址(使用
ifconfig broadcast),这是在广播地址可能是非标准的情况下完成的。 一般来说,如果你使用ifconfig的broadcast选项,你正在做一些奇怪的事情,可能是错误的 …
如果你想发送一个广播到127.0.0.0/8(本地/回送)networking,理论上你只需要将stream量导向127.255.255.255,但是如果你尝试这样做,你会发现它不工作,因为回环设备不支持BROADCASTstream量。
你可以通过在你的mac上运行ifconfig lo0来自行检查,这将产生如下输出:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 options=3<RXCSUM,TXCSUM> inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 inet 127.0.0.1 netmask 0xff000000 nd6 options=1<PERFORMNUD>
请注意flags字段中缺lessBROADCAST 。
使用指定的广播选项(地址)configuration设备将导致地址被忽略。 一个BSD或Linux(Debian)盒子的行为是相似的,我希望其他平台也可以,不过你可能会发现一个奇怪的鸭子,如果你足够努力的search,你可以在环回设备上设置BROADCAST标志。
这个背后的逻辑在这个FreeBSD邮件列表文章中讨论过。 另一个不允许广播的原因也在这个服务器故障回答的讨论中讨论,它提出了使用MULTICAST (通常由回送接口支持)的替代scheme。
特别是关于你的testing案例:你所看到的不是预期的行为。 我能够重现你的行为,但只能在一个非常狭窄的情况下。
对于一个更健壮的testing,显示回环设备上的广播实际上不能在Linux上运行,请在一台方便的Linux机器上testing以下testing用例(我的testing用例:Ubuntu 13.04):
在您的回环接口上configuration第二个地址(三分之一,四分之一,五分之一)。
启动一个监听每个环回地址的netcat实例,例如 –
nc -u -l 127.0.0.1 5555
nc -u -l 127.0.0.2 5555
nc -u -l 127.0.0.3 5555
…等等
使用socat运行您的广播testing命令
echo TEST | socat - udp-datagram:127.255.255.255:5555,broadcast
您将注意到,您的netcat窗口都没有收到该消息( 预期行为,因为回送接口在其标志字段中没有公布对BROADCAST支持),但是如果直接对它们进行处理(例如echo TEST2 | socat - udp-datagram:127.0.0.2:5555 )他们收到信息没有问题。
您所要求的“解决scheme”在任何平台上都不存在(或者至less不应该工作 ),除非回送接口支持BROADCAST (可以通过ifconfig中的flags字段确定) – 您所说的平台关于不要在loopback接口上宣传对广播的支持 ,所以你不能做你所要求的。