杰瑞科技汇

java linux获取本机ip

在Java中获取Linux本机IP地址

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

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

方法1:使用InetAddress类

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class GetLocalIP {
    public static void main(String[] args) {
        try {
            // 获取所有网络接口
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                // 获取网络接口上的所有IP地址
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    // 排除回环地址和IPv6地址
                    if (!inetAddress.isLoopbackAddress() && !inetAddress.getHostAddress().contains(":")) {
                        System.out.println("本机IP地址: " + inetAddress.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

方法2:使用简单的InetAddress.getLocalHost()

import java.net.InetAddress;
import java.net.UnknownHostException;
public class SimpleLocalIP {
    public static void main(String[] args) {
        try {
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("本机IP地址: " + localHost.getHostAddress());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

方法3:获取特定网络接口的IP

如果你知道要获取哪个网络接口(如eth0)的IP:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
public interfaceSpecificIP {
    public static void main(String[] args) {
        try {
            NetworkInterface networkInterface = NetworkInterface.getByName("eth0");
            if (networkInterface != null) {
                Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
                while (inetAddresses.hasMoreElements()) {
                    InetAddress inetAddress = inetAddresses.nextElement();
                    if (!inetAddress.isLoopbackAddress() && !inetAddress.getHostAddress().contains(":")) {
                        System.out.println("eth0接口的IP地址: " + inetAddress.getHostAddress());
                    }
                }
            } else {
                System.out.println("未找到eth0网络接口");
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  1. 方法1是最全面的,可以获取所有非回环的IPv4地址
  2. 方法2最简单,但有时可能返回127.0.0.1(回环地址)
  3. 在Linux环境中,网络接口名称可能是eth0, wlan0等,具体取决于你的系统配置
  4. 如果程序运行在Docker容器中,可能需要特殊处理才能获取正确的宿主机IP

获取非回环IP的推荐方法

如果你只需要获取一个非回环的IP地址,可以使用以下方法:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
public class GetNonLoopbackIP {
    public static String getNonLoopbackIP() throws SocketException {
        for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
            if (!networkInterface.isLoopback()) {
                for (InetAddress inetAddress : Collections.list(networkInterface.getInetAddresses())) {
                    if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().contains(".")) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        }
        return null;
    }
    public static void main(String[] args) {
        try {
            String ip = getNonLoopbackIP();
            System.out.println("本机非回环IP地址: " + ip);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
}

方法都可以在Linux环境中获取本机IP地址,选择哪种方法取决于你的具体需求。

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