diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/net/Ipv4Util.java b/hutool-core/src/main/java/org/dromara/hutool/core/net/Ipv4Util.java index f603b837b..6f1483235 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/net/Ipv4Util.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/net/Ipv4Util.java @@ -130,6 +130,27 @@ public class Ipv4Util implements Ipv4Pool { * @return 本机网卡IP地址,获取失败返回{@code null} */ public static InetAddress getLocalhostDirectly() { + return getLocalhostDirectly(false); + } + + /** + * 获取本机网卡IPv4地址,不使用缓存,规则如下: + * + * + * + *

+ * 此方法不会抛出异常,获取失败将返回{@code null}
+ *

+ * 见:https://github.com/dromara/hutool/issues/428 + * + * @param includeSiteLocal 是否包含局域网地址,如10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255 + * @return 本机网卡IP地址,获取失败返回{@code null} + */ + public static InetAddress getLocalhostDirectly(final boolean includeSiteLocal) { final LinkedHashSet localAddressList = NetUtil.localAddressList(address -> // 需为IPV4地址 address instanceof Inet4Address @@ -139,7 +160,7 @@ public class Ipv4Util implements Ipv4Pool { // 10.0.0.0 ~ 10.255.255.255 // 172.16.0.0 ~ 172.31.255.255 // 192.168.0.0 ~ 192.168.255.255 - && !address.isSiteLocalAddress() + && (includeSiteLocal || !address.isSiteLocalAddress()) // 非链路本地地址:169.254.0.0/16 && !address.isLinkLocalAddress() );