fix: 判断内网函数支持ipv6检测
This commit is contained in:
parent
d166553063
commit
03d9be3b11
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user