change code

This commit is contained in:
looly
2021-12-12 09:41:34 +08:00
parent 6c120dd568
commit f7db6c75d5
2 changed files with 60 additions and 33 deletions

View File

@@ -22,6 +22,8 @@ import java.util.regex.Matcher;
*/ */
public class Ipv4Util { public class Ipv4Util {
public static final String LOCAL_IP = "127.0.0.1";
/** /**
* IP段的分割符 * IP段的分割符
*/ */
@@ -305,6 +307,36 @@ public class Ipv4Util {
return MaskBit.get(maskBit) != null; return MaskBit.get(maskBit) != null;
} }
/**
* 判定是否为内网IPv4<br>
* 私有IP
* <pre>
* A类 10.0.0.0-10.255.255.255
* B类 172.16.0.0-172.31.255.255
* C类 192.168.0.0-192.168.255.255
* </pre>
* 当然还有127这个网段是环回地址
*
* @param ipAddress IP地址
* @return 是否为内网IP
* @since 5.7.18
*/
public static boolean isInnerIP(String ipAddress) {
boolean isInnerIp;
long ipNum = ipv4ToLong(ipAddress);
long aBegin = ipv4ToLong("10.0.0.0");
long aEnd = ipv4ToLong("10.255.255.255");
long bBegin = ipv4ToLong("172.16.0.0");
long bEnd = ipv4ToLong("172.31.255.255");
long cBegin = ipv4ToLong("192.168.0.0");
long cEnd = ipv4ToLong("192.168.255.255");
isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || LOCAL_IP.equals(ipAddress);
return isInnerIp;
}
//-------------------------------------------------------------------------------- Private method start //-------------------------------------------------------------------------------- Private method start
@@ -334,5 +366,17 @@ public class Ipv4Util {
} }
return addr; return addr;
} }
/**
* 指定IP的long是否在指定范围内
*
* @param userIp 用户IP
* @param begin 开始IP
* @param end 结束IP
* @return 是否在范围内
*/
private static boolean isInner(long userIp, long begin, long end) {
return (userIp >= begin) && (userIp <= end);
}
//-------------------------------------------------------------------------------- Private method end //-------------------------------------------------------------------------------- Private method end
} }

View File

@@ -48,7 +48,7 @@ import java.util.TreeSet;
*/ */
public class NetUtil { public class NetUtil {
public final static String LOCAL_IP = "127.0.0.1"; public final static String LOCAL_IP = Ipv4Util.LOCAL_IP;
public static String localhostName; public static String localhostName;
@@ -230,27 +230,21 @@ public class NetUtil {
} }
/** /**
* 判定是否为内网IP<br> * 判定是否为内网IPv4<br>
* 私有IPA类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然还有127这个网段是环回地址 * 私有IP
* <pre>
* A类 10.0.0.0-10.255.255.255
* B类 172.16.0.0-172.31.255.255
* C类 192.168.0.0-192.168.255.255
* </pre>
* 当然还有127这个网段是环回地址
* *
* @param ipAddress IP地址 * @param ipAddress IP地址
* @return 是否为内网IP * @return 是否为内网IP
* @see Ipv4Util#isInnerIP(String)
*/ */
public static boolean isInnerIP(String ipAddress) { public static boolean isInnerIP(String ipAddress) {
boolean isInnerIp; return Ipv4Util.isInnerIP(ipAddress);
long ipNum = NetUtil.ipv4ToLong(ipAddress);
long aBegin = NetUtil.ipv4ToLong("10.0.0.0");
long aEnd = NetUtil.ipv4ToLong("10.255.255.255");
long bBegin = NetUtil.ipv4ToLong("172.16.0.0");
long bEnd = NetUtil.ipv4ToLong("172.31.255.255");
long cBegin = NetUtil.ipv4ToLong("192.168.0.0");
long cEnd = NetUtil.ipv4ToLong("192.168.255.255");
isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || LOCAL_IP.equals(ipAddress);
return isInnerIp;
} }
/** /**
@@ -700,7 +694,7 @@ public class NetUtil {
*/ */
public static boolean isInRange(String ip, String cidr) { public static boolean isInRange(String ip, String cidr) {
final int maskSplitMarkIndex = cidr.lastIndexOf(Ipv4Util.IP_MASK_SPLIT_MARK); final int maskSplitMarkIndex = cidr.lastIndexOf(Ipv4Util.IP_MASK_SPLIT_MARK);
if(maskSplitMarkIndex < 0){ if (maskSplitMarkIndex < 0) {
throw new IllegalArgumentException("Invalid cidr: " + cidr); throw new IllegalArgumentException("Invalid cidr: " + cidr);
} }
@@ -837,17 +831,17 @@ public class NetUtil {
* NetUtil.attrNames("hutool.cn", "TXT") * NetUtil.attrNames("hutool.cn", "TXT")
* </pre> * </pre>
* *
* @param hostName 主机域名 * @param hostName 主机域名
* @param attrNames 属性 * @param attrNames 属性
* @since 5.7.7
* @return DNS信息 * @return DNS信息
* @since 5.7.7
*/ */
public static List<String> getDnsInfo(String hostName, String... attrNames){ public static List<String> getDnsInfo(String hostName, String... attrNames) {
final String uri = StrUtil.addPrefixIfNot(hostName, "dns:"); final String uri = StrUtil.addPrefixIfNot(hostName, "dns:");
final Attributes attributes = JNDIUtil.getAttributes(uri, attrNames); final Attributes attributes = JNDIUtil.getAttributes(uri, attrNames);
final List<String> infos = new ArrayList<>(); final List<String> infos = new ArrayList<>();
for (Attribute attribute: new EnumerationIter<>(attributes.getAll())){ for (Attribute attribute : new EnumerationIter<>(attributes.getAll())) {
try { try {
infos.add((String) attribute.get()); infos.add((String) attribute.get());
} catch (NamingException ignore) { } catch (NamingException ignore) {
@@ -859,16 +853,5 @@ public class NetUtil {
// ----------------------------------------------------------------------------------------- Private method start // ----------------------------------------------------------------------------------------- Private method start
/**
* 指定IP的long是否在指定范围内
*
* @param userIp 用户IP
* @param begin 开始IP
* @param end 结束IP
* @return 是否在范围内
*/
private static boolean isInner(long userIp, long begin, long end) {
return (userIp >= begin) && (userIp <= end);
}
// ----------------------------------------------------------------------------------------- Private method end // ----------------------------------------------------------------------------------------- Private method end
} }