如何在Java中确定路由器/网关的IP?我可以轻松地获得我的IP.我可以使用网站上的服务获取我的互联网IP.但是如何确定网关的IP?
如果你了解自己的方式,这在.NET中有点容易.但是你如何用Java做到这一点?
在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
Run Code Online (Sandbox Code Playgroud)
做了一些谷歌搜索后,我仍然没有找到任何答案.
编辑:
java运行时必须"知道"如何获取此信息(并不是说它已暴露).当使用join(InetAddress grpAddr)调用(未指定接口)将java.net.MulticastSocket连接到多播组时,明显的行为似乎是在"默认"接口上加入(如上所述).即使默认的intf不是路由表中列出的第一个接口,这也可以工作.但是,加入mcast组的基础POSIX调用需要此信息!:
struct ip_mreqn group;
group.imr_multiaddr = ...
group.imr_address = **address of the …Run Code Online (Sandbox Code Playgroud)