您的位置:

Java获取本地IP

一、背景介绍

在开发网络应用程序时,我们常常需要获取本地IP地址。而在Java中,就可以使用不同的方式获取本地IP地址。以下将介绍四种获取本地IP地址的方法。

二、方法介绍

1. 使用InetAddress.getLocalHost()方法

使用InetAddress.getLocalHost()方法,可以获得本地机器的IP地址。该方法返回一个InetAddress类型的对象,可以调用其getHostAddress()方法获取本机IP地址。

try {
    InetAddress address = InetAddress.getLocalHost();
    String ip = address.getHostAddress();
    System.out.println("本机IP地址为:" + ip);
} catch (UnknownHostException e) {
    e.printStackTrace();
}

2. 使用NetworkInterface.getNetworkInterfaces()方法

使用NetworkInterface.getNetworkInterfaces()方法,可以获取计算机上所有的网络接口。通过循环遍历每一个网络接口,判断是否为本地IP地址(127.0.0.1)或者局域网IP地址(192.168.xx.xx 或 10.xx.xx.xx)。如果是,则返回该IP地址。

try {
    Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
        NetworkInterface networkInterface = interfaces.nextElement();
        Enumeration
    addresses = networkInterface.getInetAddresses();
        while (addresses.hasMoreElements()) {
            InetAddress address = addresses.nextElement();
            if (address.isSiteLocalAddress() && !address.isLoopbackAddress() && address.getHostAddress().indexOf(":")==-1) {
                String ip = address.getHostAddress();
                System.out.println("本机IP地址为:" + ip);
            }
        }
    }
} catch (SocketException e) {
    e.printStackTrace();
}

   
  

3. 使用System.getProperty()方法

使用System.getProperty()方法,可以获取本机的一些系统属性。其中,"java.net.preferIPv4Stack"为一个系统属性,将其设置为"true"即可获取计算机上的IPv4地址。

String ip = "";
try {
    InetAddress inetAddress = InetAddress.getLocalHost();
    ip = System.getProperty("java.net.preferIPv4Stack").equals("true")?inetAddress.getHostAddress():null;
} catch (Exception e) {
    e.printStackTrace();
}
System.out.println("本机IP地址为:" + ip);

4. 使用Runtime.getRuntime().exec()方法

可以通过执行系统命令ipconfig或ifconfig,来获取本地IP地址。如果使用Windows系统,则使用ipconfig;如果使用Linux系统,则使用ifconfig。以下是在Windows系统下获取本地IP地址的示例代码:

StringBuffer buf = new StringBuffer();
try {
    Process process = Runtime.getRuntime().exec("ipconfig");
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line = "";
    while ((line = reader.readLine()) != null) {
        buf.append(line + "\n");
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}
String regex = "IPv4 地址.*: ((\\d+\\.){3}\\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(buf.toString());
if (matcher.find()) {
    String ip = matcher.group(1);
    System.out.println("本机IP地址为:" + ip);
}

三、总结

以上就是获取本机IP地址的四种方法,每种方法都有其适用的场景和优缺点。开发者可以根据具体需求选择使用哪种方法来获取本地IP地址。