Merge pull request #11 from hisequel/fix-internal-func-support-ipv6
fix: 判断内网函数支持ipv6检测
This commit is contained in:
commit
91a08e6647
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user