From f37edfd84fe1847a2c8ccaf3cbca926abe99b705 Mon Sep 17 00:00:00 2001
From: LuisStruggle <18300767078@163.com>
Date: Fri, 10 Feb 2023 11:28:46 +0800
Subject: [PATCH 001/125] =?UTF-8?q?fix=EF=BC=9AListUtil.reverse()=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=BD=93=E8=AF=A5=E6=96=B9=E6=B3=95=E7=9A=84?=
=?UTF-8?q?=E5=8F=82=E6=95=B0list=E4=B8=BAnull=E5=AF=B9=E8=B1=A1=E6=97=B6?=
=?UTF-8?q?=EF=BC=8C=E5=87=BA=E7=8E=B0=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82?=
=?UTF-8?q?=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/cn/hutool/core/collection/ListUtil.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
index be30e38d3..c59a9dae7 100755
--- a/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/collection/ListUtil.java
@@ -386,6 +386,9 @@ public class ListUtil {
* @since 4.0.6
*/
public static pr自:https://gitee.com/loolly/hutool/pulls/161 名词解释:
+ * 方法别名:inet_aton 方法别名:inet_ntoa 例如,ip为{@literal 0xC0A802FA},第1部分的值为:
+ *
+ *
+ *
* @author ZhuKun
+ * @author emptypoint
* @since 5.4.1
*/
public class Ipv4Util {
@@ -43,22 +55,57 @@ public class Ipv4Util {
public static final int IP_MASK_MAX = 32;
/**
- * 格式化IP段
+ * 最小掩码位
+ */
+ public static final int IP_MASK_MIN = 1;
+
+ /**
+ * A类私有地址的最小值
+ */
+ public static final long A_INNER_IP_LONG_BEGIN = ipv4ToLong("10.0.0.0");
+
+ /**
+ * A类私有地址的最大值
+ */
+ public static final long A_INNER_IP_LONG_END = ipv4ToLong("10.255.255.255");
+
+ /**
+ * B类私有地址的最小值
+ */
+ public static final long B_INNER_IP_LONG_BEGIN = ipv4ToLong("172.16.0.0");
+
+ /**
+ * B类私有地址的最大值
+ */
+ public static final long B_INNER_IP_LONG_END = ipv4ToLong("172.31.255.255");
+
+ /**
+ * C类私有地址的最小值
+ */
+ public static final long C_INNER_IP_LONG_BEGIN = ipv4ToLong("192.168.0.0");
+
+ /**
+ * C类私有地址的最大值
+ */
+ public static final long C_INNER_IP_LONG_END = ipv4ToLong("192.168.255.255");
+
+ /**
+ * 根据 ip地址 和 掩码地址 获得 CIDR格式字符串
*
- * @param ip IP地址
- * @param mask 掩码
- * @return 返回xxx.xxx.xxx.xxx/mask的格式
+ * @param ip IP地址,点分十进制,如:xxx.xxx.xxx.xxx
+ * @param mask 掩码地址,点分十进制,如:255.255.255.0
+ * @return 返回 {@literal xxx.xxx.xxx.xxx/掩码位} 的格式
*/
public static String formatIpBlock(final String ip, final String mask) {
return ip + IP_MASK_SPLIT_MARK + getMaskBitByMask(mask);
}
/**
- * 智能转换IP地址集合
+ * 智能获取指定区间内的所有IP地址
*
- * @param ipRange IP段,支持X.X.X.X-X.X.X.X或X.X.X.X/X
- * @param isAll true:全量地址,false:可用地址;仅在ipRange为X.X.X.X/X时才生效
- * @return IP集
+ * @param ipRange IP区间,支持 {@literal X.X.X.X-X.X.X.X} 或 {@literal X.X.X.X/X}
+ * @param isAll true:全量地址,false:可用地址;该参数仅在ipRange为X.X.X.X/X时才生效
+ * @return 区间内的所有IP地址,点分十进制格式
*/
public static List
+ *
+ *
{@code + * accept(t) + * return this; + * }*/ default Builder
+ *
+ * 为了方便处理作出以下特别说明,若后续因此收到影响或有更好处理方式需要及时调整: + * 1、此处定义的`最小值`、`最大值`并非实际ip可分配的最小值、最大值。而是正常地址格式所能表示的最小值、最大值。 + * 2、比如:1.0.0.0这种保留地址,我们仍然认为属于A类网。 + * 3、类似于127.0.0.1这种本地回环地址,我们仍然认为数据C类网。 + *+ * + * @author aoshiguchen + * @author emptypoint + * @since 6.0.0 + */ +public interface Ipv4Pool { + + /** + * IP段的分割符 + */ + String IP_SPLIT_MARK = "-"; + + /** + * IP与掩码的分割符 + */ + String IP_MASK_SPLIT_MARK = "/"; + + /** + * localhost默认解析的ip地址 + */ + String LOCAL_IP = "127.0.0.1"; + /** + * localhost默认解析的ip地址的数值形式 + */ + long LOCAL_IP_NUM = Ipv4Util.ipv4ToLong(LOCAL_IP); + + /** + * Ipv4地址最小值字符串形式 + */ + String IPV4_STR_MIN = "0.0.0.0"; + /** + * Ipv4最小值数值形式 + */ + long IPV4_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_STR_MIN); + + /** + * Ipv4地址最大值字符串形式 + */ + String IPV4_STR_MAX = "255.255.255.255"; + /** + * Ipv4最大值数值形式 + */ + long IPV4_NUM_MAX = 0xffffffffL; + + /** + * Ipv4未使用地址最小值字符串形式 + */ + String IPV4_UNUSED_STR_MIN = "0.0.0.0"; + /** + * Ipv4未使用地址最小值数值形式 + */ + long IPV4_UNUSED_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_UNUSED_STR_MIN); + + /** + * Ipv4未使用地址最大值字符串形式 + */ + String IPV4_UNUSED_STR_MAX = "0.255.255.255"; + /** + * Ipv4未使用地址最大值数值形式 + */ + long IPV4_UNUSED_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_UNUSED_STR_MAX); + + // region 子网掩码常量 + // ================================================== 子网掩码常量 ================================================== + /** + * Ipv4最小掩码位 + */ + int IPV4_MASK_BIT_MIN = 0; + + /** + * Ipv4有意义的最小掩码位 + */ + int IPV4_MASK_BIT_VALID_MIN = 1; + /** + * Ipv4有意义的最小掩码字符串 + */ + String IPV4_MASK_VALID_MIN = MaskBit.get(IPV4_MASK_BIT_VALID_MIN); + + /** + * Ipv4最大掩码位 + */ + int IPV4_MASK_BIT_MAX = 32; + /** + * Ipv4最大掩码字符串 + */ + String IPV4_MASK_MAX = MaskBit.get(IPV4_MASK_BIT_MAX); + // endregion + + // region 本地回环地址常量 + // ================================================== 本地回环地址常量 ================================================ + /** + * Ipv4 本地回环地址最小值字符串形式 + */ + String IPV4_LOOPBACK_STR_MIN = "127.0.0.0"; + /** + * Ipv4 本地回环地址最小值数值形式 + */ + long IPV4_LOOPBACK_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_LOOPBACK_STR_MIN); + /** + * Ipv4 本地回环地址最大值字符串形式 + */ + String IPV4_LOOPBACK_STR_MAX = "127.255.255.255"; + /** + * Ipv4 本地回环地址最大值数值形式 + */ + long IPV4_LOOPBACK_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_LOOPBACK_STR_MAX); + // endregion + + // region A类地址常量 + // ================================================== A类地址常量 ================================================== + /** + * Ipv4 A类地址最小值字符串形式 + */ + String IPV4_A_STR_MIN = "0.0.0.0"; + /** + * Ipv4 A类地址最小值数值形式 + */ + long IPV4_A_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_A_STR_MIN); + + /** + * Ipv4 A类地址最大值字符串形式 + */ + String IPV4_A_STR_MAX = "127.255.255.255"; + /** + * Ipv4 A类地址最大值数值形式 + */ + long IPV4_A_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_A_STR_MAX); + + /** + * Ipv4 A类地址第一个公网网段最小值字符串形式 + */ + String IPV4_A_PUBLIC_1_STR_MIN = "1.0.0.0"; + /** + * Ipv4 A类地址第一个公网网段最小值数值形式 + */ + long IPV4_A_PUBLIC_1_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_A_PUBLIC_1_STR_MIN); + + /** + * Ipv4 A类地址第一个公网网段最大值字符串形式 + */ + String IPV4_A_PUBLIC_1_STR_MAX = "9.255.255.255"; + /** + * Ipv4 A类地址第一个公网网段最大值数值形式 + */ + long IPV4_A_PUBLIC_1_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_A_PUBLIC_1_STR_MAX); + + /** + * Ipv4 A类地址私网网段最小值字符串形式 + */ + String IPV4_A_PRIVATE_STR_MIN = "10.0.0.0"; + /** + * Ipv4 A类地址私网网段最小值数值形式 + */ + long IPV4_A_PRIVATE_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_A_PRIVATE_STR_MIN); + + /** + * Ipv4 A类地址私网网段最大值字符串形式 + */ + String IPV4_A_PRIVATE_STR_MAX = "10.255.255.255"; + /** + * Ipv4 A类地址私网网段最大值数值形式 + */ + long IPV4_A_PRIVATE_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_A_PRIVATE_STR_MAX); + + /** + * Ipv4 A类地址第二个公网网段最小值字符串形式 + */ + String IPV4_A_PUBLIC_2_STR_MIN = "11.0.0.0"; + /** + * Ipv4 A类地址第二个公网网段最小值数值形式 + */ + long IPV4_A_PUBLIC_2_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_A_PUBLIC_2_STR_MIN); + + /** + * Ipv4 A类地址第二个公网网段最大值字符串形式 + */ + String IPV4_A_PUBLIC_2_STR_MAX = "126.255.255.255"; + /** + * Ipv4 A类地址第二个公网网段最大值数值形式 + */ + long IPV4_A_PUBLIC_2_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_A_PUBLIC_2_STR_MAX); + // endregion + + // region B类地址常量 + // ================================================== B类地址常量 ================================================== + /** + * Ipv4 B类地址最小值字符串形式 + */ + String IPV4_B_STR_MIN = "128.0.0.0"; + /** + * Ipv4 B类地址最小值数值形式 + */ + long IPV4_B_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_B_STR_MIN); + + /** + * Ipv4 B类地址最大值字符串形式 + */ + String IPV4_B_STR_MAX = "191.255.255.255"; + /** + * Ipv4 B类地址最大值数值形式 + */ + long IPV4_B_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_B_STR_MAX); + + /** + * Ipv4 B类地址第一个公网网段最小值字符串形式 + */ + String IPV4_B_PUBLIC_1_STR_MIN = "128.0.0.0"; + /** + * Ipv4 B类地址第一个公网网段最小值数值形式 + */ + long IPV4_B_PUBLIC_1_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_B_PUBLIC_1_STR_MIN); + + /** + * Ipv4 B类地址第一个公网网段最大值字符串形式 + */ + String IPV4_B_PUBLIC_1_STR_MAX = "172.15.255.255"; + /** + * Ipv4 B类地址第一个公网网段最大值数值形式 + */ + long IPV4_B_PUBLIC_1_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_B_PUBLIC_1_STR_MAX); + + /** + * Ipv4 B类地址私网网段最小值字符串形式 + */ + String IPV4_B_PRIVATE_STR_MIN = "172.16.0.0"; + /** + * Ipv4 B类地址私网网段最小值数值形式 + */ + long IPV4_B_PRIVATE_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_B_PRIVATE_STR_MIN); + + /** + * Ipv4 B类地址私网网段最大值字符串形式 + */ + String IPV4_B_PRIVATE_STR_MAX = "172.31.255.255"; + /** + * Ipv4 B类地址私网网段最大值数值形式 + */ + long IPV4_B_PRIVATE_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_B_PRIVATE_STR_MAX); + + /** + * Ipv4 B类地址第二个公网网段最小值字符串形式 + */ + String IPV4_B_PUBLIC_2_STR_MIN = "172.32.0.0"; + /** + * Ipv4 B类地址第二个公网网段最小值数值形式 + */ + long IPV4_B_PUBLIC_2_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_B_PUBLIC_2_STR_MIN); + + /** + * Ipv4 B类地址第二个公网网段最大值字符串形式 + */ + String IPV4_B_PUBLIC_2_STR_MAX = "191.255.255.255"; + /** + * Ipv4 B类地址第二个公网网段最大值数值形式 + */ + long IPV4_B_PUBLIC_2_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_B_PUBLIC_2_STR_MAX); + // endregion + + // region C类地址常量 + // ================================================== C类地址常量 ================================================== + /** + * Ipv4 C类地址最小值字符串形式 + */ + String IPV4_C_STR_MIN = "192.0.0.0"; + /** + * Ipv4 C类地址最小值数值形式 + */ + long IPV4_C_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_C_STR_MIN); + + /** + * Ipv4 C类地址最大值字符串形式 + */ + String IPV4_C_STR_MAX = "223.255.255.255"; + /** + * Ipv4 C类地址最大值数值形式 + */ + long IPV4_C_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_C_STR_MAX); + + /** + * Ipv4 C类地址第一个公网网段最小值字符串形式 + */ + String IPV4_C_PUBLIC_1_STR_MIN = "192.0.0.0"; + /** + * Ipv4 C类地址第一个公网网段最小值数值形式 + */ + long IPV4_C_PUBLIC_1_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_C_PUBLIC_1_STR_MIN); + + /** + * Ipv4 C类地址第一个公网网段最大值字符串形式 + */ + String IPV4_C_PUBLIC_1_STR_MAX = "192.167.255.255"; + /** + * Ipv4 C类地址第一个公网网段最大值数值形式 + */ + long IPV4_C_PUBLIC_1_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_C_PUBLIC_1_STR_MAX); + + /** + * Ipv4 C类地址私网网段最小值字符串形式 + */ + String IPV4_C_PRIVATE_STR_MIN = "192.168.0.0"; + /** + * Ipv4 C类地址私网网段最小值数值形式 + */ + long IPV4_C_PRIVATE_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_C_PRIVATE_STR_MIN); + + /** + * Ipv4 C类地址私网网段最大值字符串形式 + */ + String IPV4_C_PRIVATE_STR_MAX = "192.168.255.255"; + /** + * Ipv4 C类地址私网网段最大值数值形式 + */ + long IPV4_C_PRIVATE_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_C_PRIVATE_STR_MAX); + + /** + * Ipv4 C类地址第二个公网网段最小值字符串形式 + */ + String IPV4_C_PUBLIC_2_STR_MIN = "192.169.0.0"; + /** + * Ipv4 C类地址第二个公网网段最小值数值形式 + */ + long IPV4_C_PUBLIC_2_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_C_PUBLIC_2_STR_MIN); + + /** + * Ipv4 C类地址第二个公网网段最大值字符串形式 + */ + String IPV4_C_PUBLIC_2_STR_MAX = "223.255.255.255"; + /** + * Ipv4 C类地址第二个公网网段最大值数值形式 + */ + long IPV4_C_PUBLIC_2_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_C_PUBLIC_2_STR_MAX); + // endregion + + // region D类地址常量 + // ================================================== D类地址常量 ================================================== + /** + * Ipv4 D类地址最小值字符串形式 + */ + String IPV4_D_STR_MIN = "224.0.0.0"; + /** + * Ipv4 D类地址最小值数值形式 + */ + long IPV4_D_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_D_STR_MIN); + + /** + * Ipv4 D类地址最大值字符串形式 + */ + String IPV4_D_STR_MAX = "239.255.255.255"; + /** + * Ipv4 D类地址最大值数值形式 + */ + long IPV4_D_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_D_STR_MAX); + + /** + * Ipv4 D类地址专用网段(用于广播)最小值字符串形式 + */ + String IPV4_D_DEDICATED_STR_MIN = "224.0.0.0"; + /** + * Ipv4 D类地址专用网段(用于广播)最小值数值形式 + */ + long IPV4_D_DEDICATED_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_D_DEDICATED_STR_MIN); + + /** + * Ipv4 D类地址专用网段(用于广播)最大值字符串形式 + */ + String IPV4_D_DEDICATED_STR_MAX = "224.0.0.255"; + /** + * Ipv4 D类地址专用网段(用于广播)最大值数值形式 + */ + long IPV4_D_DEDICATED_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_D_DEDICATED_STR_MAX); + + /** + * Ipv4 D类地址公用网段(用于组播)最小值字符串形式 + */ + String IPV4_D_PUBLIC_STR_MIN = "224.0.1.0"; + /** + * Ipv4 D类地址公用网段(用于组播)最小值数值形式 + */ + long IPV4_D_PUBLIC_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_D_PUBLIC_STR_MIN); + + /** + * Ipv4 D类地址公用网段(用于组播)最大值字符串形式 + */ + String IPV4_D_PUBLIC_STR_MAX = "238.255.255.255"; + /** + * Ipv4 D类地址公用网段(用于组播)最大值数值形式 + */ + long IPV4_D_PUBLIC_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_D_PUBLIC_STR_MAX); + + /** + * Ipv4 D类地址私用网段(用于测试)最小值字符串形式 + */ + String IPV4_D_PRIVATE_STR_MIN = "239.0.0.0"; + /** + * Ipv4 D类地址私用网段(用于测试)最小值数值形式 + */ + long IPV4_D_PRIVATE_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_D_PRIVATE_STR_MIN); + + /** + * Ipv4 D类地址私用网段(用于测试)最大值字符串形式 + */ + String IPV4_D_PRIVATE_STR_MAX = "239.255.255.255"; + /** + * Ipv4 D类地址私用网段(用于测试)最大值数值形式 + */ + long IPV4_D_PRIVATE_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_D_PRIVATE_STR_MAX); + // endregion + + // region E类地址常量 + // ================================================== E类地址常量 ================================================== + /** + * Ipv4 E类地址最小值字符串形式 + */ + String IPV4_E_STR_MIN = "240.0.0.0"; + /** + * Ipv4 E类地址最小值数值形式 + */ + long IPV4_E_NUM_MIN = Ipv4Util.ipv4ToLong(IPV4_E_STR_MIN); + + /** + * Ipv4 E类地址最大值字符串形式 + */ + String IPV4_E_STR_MAX = "255.255.255.255"; + /** + * Ipv4 E类地址最大值数值形式 + */ + long IPV4_E_NUM_MAX = Ipv4Util.ipv4ToLong(IPV4_E_STR_MAX); + // endregion +} From ba944f854ac799ac0f903cc72a13101a528f6ab2 Mon Sep 17 00:00:00 2001 From: emptypoint <1215582715@qq.com> Date: Sun, 19 Feb 2023 15:08:15 +0800 Subject: [PATCH 023/125] add method; --- .../java/cn/hutool/core/net/Ipv4Util.java | 194 +++++++++--------- .../java/cn/hutool/core/net/Ipv4UtilTest.java | 23 ++- 2 files changed, 115 insertions(+), 102 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java b/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java index 617a3b0ed..ac992a443 100755 --- a/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java @@ -29,64 +29,10 @@ import java.util.regex.Matcher; * * @author ZhuKun * @author emptypoint + * @author aoshiguchen * @since 5.4.1 */ -public class Ipv4Util { - - /** - * 本地IP:127.0.0.1 - */ - public static final String LOCAL_IP = "127.0.0.1"; - - /** - * IP段的分割符 - */ - public static final String IP_SPLIT_MARK = "-"; - - /** - * IP与掩码的分割符 - */ - public static final String IP_MASK_SPLIT_MARK = StrUtil.SLASH; - - /** - * 最大掩码位 - */ - public static final int IP_MASK_MAX = 32; - - /** - * 最小掩码位 - */ - public static final int IP_MASK_MIN = 1; - - /** - * A类私有地址的最小值 - */ - public static final long A_INNER_IP_LONG_BEGIN = ipv4ToLong("10.0.0.0"); - - /** - * A类私有地址的最大值 - */ - public static final long A_INNER_IP_LONG_END = ipv4ToLong("10.255.255.255"); - - /** - * B类私有地址的最小值 - */ - public static final long B_INNER_IP_LONG_BEGIN = ipv4ToLong("172.16.0.0"); - - /** - * B类私有地址的最大值 - */ - public static final long B_INNER_IP_LONG_END = ipv4ToLong("172.31.255.255"); - - /** - * C类私有地址的最小值 - */ - public static final long C_INNER_IP_LONG_BEGIN = ipv4ToLong("192.168.0.0"); - - /** - * C类私有地址的最大值 - */ - public static final long C_INNER_IP_LONG_END = ipv4ToLong("192.168.255.255"); +public class Ipv4Util implements Ipv4Pool { /** * 根据 ip地址 和 掩码地址 获得 CIDR格式字符串 @@ -135,7 +81,7 @@ public class Ipv4Util { return new ArrayList<>(0); } - if (maskBit == IP_MASK_MAX) { + if (maskBit == IPV4_MASK_BIT_MAX) { final List
+ * 公网IP: + *
+ * A类 1.0.0.0-9.255.255.255,11.0.0.0-126.255.255.255 + * B类 128.0.0.0-172.15.255.255,172.32.0.0-191.255.255.255 + * C类 192.0.0.0-192.167.255.255,192.169.0.0-223.255.255.255 + *+ * + * @param ipAddress IP地址,点分十进制 + * @return 是否为公网IP + * @since 6.0.0 + */ + public static boolean isPublicIP(final String ipAddress) { + return isPublicIP(ipv4ToLong(ipAddress)); + } + + /** + * 是否为公网地址 + * + * @param ipNum IP地址数值形式 + * @return 是否为公网IP + * @see #isPublicIP(String) + * @since 6.0.0 + */ + public static boolean isPublicIP(final long ipNum) { + return isBetween(ipNum, IPV4_A_PUBLIC_1_NUM_MIN, IPV4_A_PUBLIC_1_NUM_MAX) + || isBetween(ipNum, IPV4_A_PUBLIC_2_NUM_MIN, IPV4_A_PUBLIC_2_NUM_MAX) + || isBetween(ipNum, IPV4_B_PUBLIC_1_NUM_MIN, IPV4_B_PUBLIC_1_NUM_MAX) + || isBetween(ipNum, IPV4_B_PUBLIC_2_NUM_MIN, IPV4_B_PUBLIC_2_NUM_MAX) + || isBetween(ipNum, IPV4_C_PUBLIC_1_NUM_MIN, IPV4_C_PUBLIC_1_NUM_MAX) + || isBetween(ipNum, IPV4_C_PUBLIC_2_NUM_MIN, IPV4_C_PUBLIC_2_NUM_MAX); + } + + /** + * 获取ip(Long类型)指定部分的十进制值,即,{@literal X.X.X.X }形式中每个部分的值 + *
例如,ip为{@literal 0xC0A802FA},第1部分的值为: + *
例如,ip为{@literal 0xC0A802FA},第1部分的值为: - *