From 03d9be3b119a4e90c2fc85db419c16f8fac077d1 Mon Sep 17 00:00:00 2001 From: Zero Date: Tue, 11 Mar 2025 21:04:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A4=E6=96=AD=E5=86=85=E7=BD=91?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E6=94=AF=E6=8C=81ipv6=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/maku/framework/common/utils/IpUtils.java | 43 ++++++++++------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/maku-framework/src/main/java/net/maku/framework/common/utils/IpUtils.java b/maku-framework/src/main/java/net/maku/framework/common/utils/IpUtils.java index 33d1bb4..91709f8 100644 --- a/maku-framework/src/main/java/net/maku/framework/common/utils/IpUtils.java +++ b/maku-framework/src/main/java/net/maku/framework/common/utils/IpUtils.java @@ -92,34 +92,29 @@ public class IpUtils { * @param addr byte地址 */ private static boolean internalIp(byte[] addr) { - if (addr == null || addr.length < 2) { - return true; + if (addr == null) return true; + + // IPv6地址处理 + if (addr.length == 16) { + return (addr[0] & 0xFE) == 0xFC; //RFC4193标准:fc00::/7 } + + // IPv4地址长度校验 + if (addr.length != 4) return true; + final byte b0 = addr[0]; final byte b1 = addr[1]; - // 10.x.x.x/8 - final byte SECTION_1 = 0x0A; - // 172.16.x.x/12 - final byte SECTION_2 = (byte) 0xAC; - final byte SECTION_3 = (byte) 0x10; - final byte SECTION_4 = (byte) 0x1F; - // 192.168.x.x/16 - final byte SECTION_5 = (byte) 0xC0; - final byte SECTION_6 = (byte) 0xA8; - switch (b0) { - case SECTION_1: - return true; - case SECTION_2: - if (b1 >= SECTION_3 && b1 <= SECTION_4) { - return true; - } - case SECTION_5: - if (b1 == SECTION_6) { - return true; - } - default: - return false; + + // 10.0.0.0/8 + if (b0 == 0x0A) return true; + + // 172.16.0.0/12 + if (b0 == (byte)0xAC) { + return (b1 >= 0x10 && b1 <= 0x1F); } + + // 192.168.0.0/16 + return (b0 == (byte)0xC0) && (b1 == (byte)0xA8); } /**