一、ifconfig

在这里插入图片描述
可以看到,本机有许多IP地址,还未许多未截取。

而实际的IP是192.168.8.28

所以我们在读取本机IP的时候,需要去掉无效的IP。

因为本机安装了docker导致生成了许多虚拟网段的IP。

二、源码


import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class GetIPAddress {
    /**
       * 获取Linux下的IP地址
       *
       * @return IP地址
       * @throws SocketException
       */
    public static String getLinuxLocalIp() throws SocketException {
           String ip = "";
           try {
                 for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
                      en.hasMoreElements();) {
                       NetworkInterface intf = en.nextElement();
                       String name = intf.getName();
                       if (!name.contains("docker") && !name.contains("lo")) {
                             for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
                                              enumIpAddr.hasMoreElements();) {
                                  InetAddress inetAddress = enumIpAddr.nextElement();
                                   if (!inetAddress.isLoopbackAddress()) {
                                       String ipaddress = inetAddress.getHostAddress().toString();
                                         if (!ipaddress.contains("::") && !ipaddress.contains("0:0:")
                                             && !ipaddress.contains("fe80")) {
                                              ip = ipaddress;
                                             }
                                       }
                                 }
                           }
                     }
               } catch (SocketException ex) {
                 System.out.println("获取ip地址异常");
                 ex.printStackTrace();
               }
           System.out.println("IP:" + ip);
           return ip;
         }
}

运行程序,得到本机正确的IP地址。

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐