您的位置:

Java获取本机IP

一、解析域名

获取本机IP的第一种方法是通过解析本机的主机名(hostname)获取IP地址。这种方法通过获取主机名,然后通过域名解析获取IP地址。

Java代码如下:

InetAddress addr = InetAddress.getLocalHost();
String ip = addr.getHostAddress();
System.out.println("Local HostAddress:" + ip);

这段代码使用InetAddress的getLocalHost方法获取本机的IP地址,并进行输出。

二、NetworkInterface获取

获取本机IP的第二种方法是通过NetworkInterface获取。使用NetworkInterface可以获取本机所有的网络接口信息,遍历每个网络接口,再获取其对应IP地址。

Java代码如下:

Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements()) {
    NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
    System.out.println(netInterface.getName() + " interface:");
    Enumeration
    addresses = netInterface.getInetAddresses();
    while (addresses.hasMoreElements()) {
        ip = addresses.nextElement();
        if (ip != null && ip instanceof Inet4Address) {
            System.out.println("IP:" + ip.getHostAddress());
        }                       
    }
}

   
  

这段代码使用NetworkInterface的getNetworkInterfaces方法获取本机的所有网络接口信息,遍历每个网络接口信息,再获取其对应的IP地址。

三、使用正则表达式

获取本机IP的第三种方法是通过Socket获取,但是这种方法需要依赖一个服务器,不够灵活方便。我们可以使用正则表达式提取本机IP地址。

Java代码如下:

public static String getLocalIPByRegex() throws SocketException {
    String ip = "";
    //获取所有网络接口
    Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
    while(netInterfaces.hasMoreElements()) {
        NetworkInterface ni = (NetworkInterface)netInterfaces.nextElement();
        //获取对应的网络地址
        Enumeration addressEnum = ni.getInetAddresses();
        while(addressEnum.hasMoreElements()) {
            InetAddress inetAddress = (InetAddress)addressEnum.nextElement();
            //正则表达式判断IP地址是否合法
            if(inetAddress.getHostAddress().matches("^\\d{1,3}(\\.\\d{1,3}){3}$")) {
                //判断是否为127.0.0.1,如果是,继续循环
                if(inetAddress.isLoopbackAddress()) {
                    continue;
                }
                //获取IP地址
                ip += inetAddress.getHostAddress() + ";";
            }
        }
    }
    return ip.substring(0, ip.lastIndexOf(";"));
}

这段代码使用正则表达式判断获取到的IP地址是否合法,判断是否为本机的回送地址127.0.0.1,如果是,则继续循环,否则获取IP地址。

四、总结

通过上述三种方法,我们可以轻松获取本机的IP地址。

通过解析域名的方式获取IP地址,代码更加简洁,但是需要保证主机名可解析。

通过NetworkInterface方式获取IP地址,可以获取本机所有的IP地址,包括IPv4、IPv6,但是需要循环遍历所有的网络接口。

通过正则表达式方式获取IP地址,使用简单方便,但是不够灵活,只能获取ipv4地址。