From 2573f2327a2046ec8545e80e4e56d1ee6c55bfae Mon Sep 17 00:00:00 2001
From: zhangmei <645025773@qq.com>
Date: 星期六, 08 二月 2025 13:39:41 +0800
Subject: [PATCH] Merge branch 'xizang-changyun' of https://gitee.com/xiaochen991015/xizang into xizang-changyun

---
 ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java |   76 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
index 8e89e30..8874697 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java
@@ -1,16 +1,20 @@
 package com.ruoyi.common.utils.ip;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
+import java.net.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
 import javax.servlet.http.HttpServletRequest;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 获取IP方法
  * 
  * @author ruoyi
  */
+@Slf4j
 public class IpUtils
 {
     public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)";
@@ -379,4 +383,72 @@
         }
         return false;
     }
+
+
+    private static final String LOOP_BACK = "127.0.0.1";
+    private static String firstNoLoopbackIPV4Address = null;
+
+    private static Collection<InetAddress> allHostIPV4Address = null;
+    /**
+     * 获取ipv4地址,如果有多个网卡的情况,获取第一个非loopback ip地址
+     *
+     * @return
+     */
+    public static String getFirstNoLoopbackIPV4Address() {
+        if (firstNoLoopbackIPV4Address != null) {
+            return firstNoLoopbackIPV4Address;
+        }
+        Collection<String> allNoLoopbackAddresses = null;
+        try {
+            allNoLoopbackAddresses = getAllNoLoopbackIPV4Addresses();
+        } catch (Exception e) {
+            log.error("获取ip失败", e);
+            return LOOP_BACK;
+        }
+        if (allNoLoopbackAddresses.isEmpty()) {
+            return LOOP_BACK;
+        }
+
+        return firstNoLoopbackIPV4Address = allNoLoopbackAddresses.iterator().next();
+    }
+
+
+    public static Collection<String> getAllNoLoopbackIPV4Addresses() {
+        Collection<String> noLoopbackAddresses = new ArrayList<String>();
+        Collection<InetAddress> allInetAddresses = getAllHostIPV4Address();
+
+        for (InetAddress address : allInetAddresses) {
+            if (!address.isLoopbackAddress()) {
+                noLoopbackAddresses.add(address.getHostAddress());
+            }
+        }
+
+        return noLoopbackAddresses;
+    }
+
+    public static Collection<InetAddress> getAllHostIPV4Address() {
+        if (allHostIPV4Address == null) {
+            try {
+                Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
+                Collection<InetAddress> addresses = new ArrayList<InetAddress>();
+
+                while (networkInterfaces.hasMoreElements()) {
+                    NetworkInterface networkInterface = networkInterfaces.nextElement();
+                    Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
+                    while (inetAddresses.hasMoreElements()) {
+                        InetAddress inetAddress = inetAddresses.nextElement();
+                        if (inetAddress instanceof Inet4Address) {
+                            addresses.add(inetAddress);
+                        }
+                    }
+                }
+                allHostIPV4Address = addresses;
+            } catch (SocketException e) {
+                log.error("获取ip地址失败", e);
+                throw new RuntimeException(e.getMessage(), e);
+            }
+
+        }
+        return allHostIPV4Address;
+    }
 }
\ No newline at end of file

--
Gitblit v1.7.1