Merge pull request #11 from hisequel/fix-internal-func-support-ipv6

fix: 判断内网函数支持ipv6检测
This commit is contained in:
阿沐 2025-03-28 09:58:45 +08:00 committed by GitHub
commit 91a08e6647
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -92,34 +92,29 @@ public class IpUtils {
* @param addr byte地址 * @param addr byte地址
*/ */
private static boolean internalIp(byte[] addr) { private static boolean internalIp(byte[] addr) {
if (addr == null || addr.length < 2) { if (addr == null) return true;
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 b0 = addr[0];
final byte b1 = addr[1]; final byte b1 = addr[1];
// 10.x.x.x/8
final byte SECTION_1 = 0x0A; // 10.0.0.0/8
// 172.16.x.x/12 if (b0 == 0x0A) return true;
final byte SECTION_2 = (byte) 0xAC;
final byte SECTION_3 = (byte) 0x10; // 172.16.0.0/12
final byte SECTION_4 = (byte) 0x1F; if (b0 == (byte)0xAC) {
// 192.168.x.x/16 return (b1 >= 0x10 && b1 <= 0x1F);
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;
} }
// 192.168.0.0/16
return (b0 == (byte)0xC0) && (b1 == (byte)0xA8);
} }
/** /**