Java查找默认网关的网络接口
发布时间:2020-12-15 00:40:13 所属栏目:Java 来源:网络整理
导读:在 Java中,我想找到与所使用的接口相对应的java.net.NetworkInterface到达默认网关.接口的名称等不是提前知道的. 换句话说,如果以下是我的路由表,我希望接口对应“bond0”: $netstat -rKernel IP routing tableDestination Gateway Genmask Flags MSS Windo
在
Java中,我想找到与所使用的接口相对应的java.net.NetworkInterface到达默认网关.接口的名称等不是提前知道的.
换句话说,如果以下是我的路由表,我希望接口对应“bond0”: $netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.10.10.0 * 255.255.255.0 U 0 0 0 bond0 10.10.11.0 * 255.255.255.0 U 0 0 0 eth2 10.10.11.0 * 255.255.255.0 U 0 0 0 eth3 10.10.12.0 * 255.255.255.0 U 0 0 0 eth4 10.10.13.0 * 255.255.255.0 U 0 0 0 eth5 default mygateway 0.0.0.0 UG 0 0 0 bond0 做了一些谷歌搜索后,我仍然没有找到任何答案. 编辑: struct ip_mreqn group; group.imr_multiaddr = ... group.imr_address = **address of the interface!** setsockopty(sd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&group,sizeof(group)); 关键点:通过提供一种加入不需要intf的多播组的方法,java平台必须知道如何在每个平台上确定适当的intf. 解决方法
我的方式是:
try(DatagramSocket s=new DatagramSocket()) { s.connect(InetAddress.getByAddress(new byte[]{1,1,1}),0); return NetworkInterface.getByInetAddress(s.getLocalAddress()).getHardwareAddress(); } 由于使用数据报(UDP),它不会连接到任何地方,因此端口号可能没有意义,远程地址(1.1.1.1)无需可达,只是可路由. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |