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); } /**