确定入站UDP广播包的网络接口

时间:2015-03-05 09:53:00

标签: java linux udp netty broadcast

我使用netty 4来编写UDP服务器。我的目标是接收广播数据包并发送(广播)响应。 (实际上DHCP,但我不认为这对我的问题很重要。)

由于我无法绑定到单个接口并且在不成为root的情况下侦听广播数据包,因此我绑定了任何一个:

Bootstrap bootstrap = new Bootstrap();
bootstrap.group(eventLoopGroup)
    .channel(NioDatagramChannel.class)
    .option(ChannelOption.SO_BROADCAST, true)
    .handler(new DhcpChannelInitializer());
bootstrap.bind(67);

在我的消息处理程序(ChannelInboundHandlerAdapter)中,我需要发送广播数据包作为响应。问题是," 255.255.255.255"不起作用。所以我需要界面的广播地址。但我不知道入站数据包来自哪个接口。

有没有办法告诉数据包来自哪个接口(本地地址)? ((DatagramPacket) msg).recipient()给出0.0.0.0 - 因为它是广播。

如果不可能,我的解决方法是查询所有接口并将数据包发送到所有广播地址。但这会产生不必要的流量。 有任何建议吗?

0 个答案:

没有答案