2011-05-10 64 views

回答

0

有没有简单的方法来做到这一点。您必须调用本地系统命令并解析输出,或者读取配置文件或注册表。没有平台独立的方式,我知道做这个工作 - 如果你想运行它们,你必须为linux,mac和windows编码。

How can I determine the IP of my router/gateway in Java?

覆盖网关,你可以用ifconfig或IPCONFIG以及得到这个。对于DNS信息,您必须在Windows上调用不同的系统命令(如ipconfig),或者在Linux或Mac上解析/etc/resolv.conf。

0

目前在Java中没有标准接口来获取默认网关或DNS服务器地址。您将需要一个shell命令。

0

My way是:

try(DatagramSocket s=new DatagramSocket()) 
{ 
    s.connect(InetAddress.getByAddress(new byte[]{1,1,1,1}), 0); 
    return NetworkInterface.getByInetAddress(s.getLocalAddress()).getHardwareAddress(); 
} 

由于使用数据报(UDP)的,它不会在任何位置连接,所以端口号可以是无意义的和远程地址(1.1.1.1)不需要是可到达的,只是路由。

+0

这不会总是返回默认网关,即完全组成。分组路由是通过多种因素确定的,其中之一是目的地址。如果您的默认网关无法接受/路由您的目的地址,则您的数据包将通过另一条路线传送,该路线可能是也可能不是所有可用路线中最差的;取决于您的网络适配器指标,它也可能是第二个最佳路线或其中之一。请不要使用假设编写软件,这会使整个业务情况变得更糟。 – specializt 2015-06-29 16:34:27

+0

这很巧妙。但它取决于目的地址,最好使用[在互联网上的真实地址](http://serverfault.com/q/132805/92104)来确保您至少获得*一个有效的路由,即使这不是默认路线。 – 2017-03-22 13:22:17

+0

如果你有工作的DNS,你可以在这里使用主机名而不是地址; 'a.root-servers.net'保证始终存在,并且不太可能存在于您的本地网络中。 – 2017-03-22 13:43:07

1


在Windows与ipconfig帮助:

​​

在这里我得到我的路由器的默认网关的IP地址,打开它在浏览器中看到我的路由器的设置页面。