杰瑞科技汇

java linux 获取本机ip

在Java中获取Linux本机IP地址的方法

在Java中获取Linux系统的本机IP地址有几种方法,以下是几种常用的实现方式:

java linux 获取本机ip-图1
(图片来源网络,侵删)

方法1:使用NetworkInterface类(推荐)

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
public class GetLocalIP {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while (networkInterfaces.hasMoreElements()) {
            NetworkInterface ni = networkInterfaces.nextElement();
            Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
            while (inetAddresses.hasMoreElements()) {
                InetAddress inetAddress = inetAddresses.nextElement();
                if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() 
                    && inetAddress.getHostAddress().indexOf(":") == -1) {
                    System.out.println("IP: " + inetAddress.getHostAddress());
                }
            }
        }
    }
}

方法2:使用InetAddress.getLocalHost()

import java.net.InetAddress;
public class GetLocalIP {
    public static void main(String[] args) throws Exception {
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println("IP: " + localHost.getHostAddress());
    }
}

方法3:执行Linux命令获取IP

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class GetLocalIP {
    public static void main(String[] args) throws Exception {
        Process process = Runtime.getRuntime().exec("hostname -I");
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = reader.readLine();
        if (line != null) {
            String[] ips = line.split(" ");
            for (String ip : ips) {
                System.out.println("IP: " + ip);
            }
        }
    }
}

注意事项

  1. 方法1是最可靠的方式,因为它不依赖于系统命令,且能获取所有网络接口的IP
  2. 方法2简单但可能返回127.0.0.1(回环地址)
  3. 方法3依赖于Linux系统命令,可能在不同发行版上有差异
  4. 在实际应用中,你可能需要过滤掉回环地址(127.0.0.1)和IPv6地址

获取特定网络接口的IP

如果你只想获取特定网络接口(如eth0)的IP:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
public class GetSpecificInterfaceIP {
    public static void main(String[] args) throws Exception {
        String interfaceName = "eth0"; // 替换为你想要的网络接口名
        NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
        if (networkInterface != null) {
            Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
            while (inetAddresses.hasMoreElements()) {
                InetAddress inetAddress = inetAddresses.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    System.out.println(interfaceName + " IP: " + inetAddress.getHostAddress());
                }
            }
        } else {
            System.out.println("Network interface " + interfaceName + " not found");
        }
    }
}

选择哪种方法取决于你的具体需求和环境,在大多数情况下,方法1(使用NetworkInterface)是最通用和可靠的解决方案。

java linux 获取本机ip-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇