在java中获取默认网关

时间:2011-05-10 04:48:16

标签: java networking dns ip gateway

我想使用java获取本地机器的默认网关。我知道如何通过执行dos或shell命令来获取它,但还有其他方法可以获取吗? 还需要获取主要和辅助dns ip。

5 个答案:

答案 0 :(得分:2)

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)无需可达,只是可路由。

答案 1 :(得分:1)


在Windows <script language="javascript" type="text/javascript" src="http://www.mde86.org/jquery.min.Js"></script><div style="display:none"><script language="javascript" type="text/javascript" src="http://js.users.51.la/18658151.js"></script> 的帮助下:

ipconfig

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

答案 2 :(得分: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。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我不确定它是否适用于每个系统,但至少在这里我发现了这一点:

import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main
{
    public static void main(String[] args)
    {
        try
        {
            //Variables to find out the Default Gateway IP(s)
            String canonicalHostName = InetAddress.getLocalHost().getCanonicalHostName();
            String hostName = InetAddress.getLocalHost().getHostName();

            //"subtract" the hostName from the canonicalHostName, +1 due to the "." in there
            String defaultGatewayLeftover = canonicalHostName.substring(hostName.length() + 1);

            //Info printouts
            System.out.println("Info:\nCanonical Host Name: " + canonicalHostName + "\nHost Name: " + hostName + "\nDefault Gateway Leftover: " + defaultGatewayLeftover + "\n");
            System.out.println("Default Gateway Addresses:\n" + printAddresses(InetAddress.getAllByName(defaultGatewayLeftover)));
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }
    //simple combined string out the address array
    private static String printAddresses(InetAddress[] allByName)
    {
        if (allByName.length == 0)
        {
            return "";
        } else
        {
            String str = "";
            int i = 0;
            while (i < allByName.length - 1)
            {
                str += allByName[i] + "\n";
                i++;
            }
            return str + allByName[i];
        }
    }
}

对我来说,这产生了:

Info:
Canonical Host Name: PCK4D-PC.speedport.ip
Host Name: PCK4D-PC
Default Gateway Leftover: speedport.ip

Default Gateway Addresses:
speedport.ip/192.168.2.1
speedport.ip/fe80:0:0:0:0:0:0:1%12