• Common class for judge IPV6 or IPV4


    import java.util.regex.Pattern;
    
    import org.apache.http.annotation.Immutable;
    
    /**
     * A collection of utilities relating to InetAddresses.
     *
     * @since 4.0
     */
    @Immutable
    public class InetAddressUtils {
    
        private InetAddressUtils() {
        }
    
        private static final String IPV4_BASIC_PATTERN_STRING =
                "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}" + // initial 3 fields, 0-255 followed by .
                 "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"; // final field, 0-255
    
        private static final Pattern IPV4_PATTERN =
            Pattern.compile("^" + IPV4_BASIC_PATTERN_STRING + "$");
    
        private static final Pattern IPV4_MAPPED_IPV6_PATTERN = // TODO does not allow for redundant leading zeros
                Pattern.compile("^::[fF]{4}:" + IPV4_BASIC_PATTERN_STRING + "$");
    
        private static final Pattern IPV6_STD_PATTERN =
            Pattern.compile(
                    "^[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}$");
    
        private static final Pattern IPV6_HEX_COMPRESSED_PATTERN =
            Pattern.compile(
                    "^(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)" + // 0-6 hex fields
                     "::" +
                     "(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)$"); // 0-6 hex fields
    
        /*
         *  The above pattern is not totally rigorous as it allows for more than 7 hex fields in total
         */
        private static final char COLON_CHAR = ':';
    
        // Must not have more than 7 colons (i.e. 8 fields)
        private static final int MAX_COLON_COUNT = 7;
    
        /**
         * Checks whether the parameter is a valid IPv4 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid IPv4 address
         */
        public static boolean isIPv4Address(final String input) {
            return IPV4_PATTERN.matcher(input).matches();
        }
    
        public static boolean isIPv4MappedIPv64Address(final String input) {
            return IPV4_MAPPED_IPV6_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid standard (non-compressed) IPv6 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid standard (non-compressed) IPv6 address
         */
        public static boolean isIPv6StdAddress(final String input) {
            return IPV6_STD_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid compressed IPv6 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid compressed IPv6 address
         */
        public static boolean isIPv6HexCompressedAddress(final String input) {
            int colonCount = 0;
            for(int i = 0; i < input.length(); i++) {
                if (input.charAt(i) == COLON_CHAR) {
                    colonCount++;
                }
            }
            return  colonCount <= MAX_COLON_COUNT && IPV6_HEX_COMPRESSED_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid IPv6 address (including compressed).
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid standard or compressed IPv6 address
         */
        public static boolean isIPv6Address(final String input) {
            return isIPv6StdAddress(input) || isIPv6HexCompressedAddress(input);
        }
    
    }
  • 相关阅读:
    FTP登录 下载上传文件(太过简单暂时未写)
    依据文档批次命名图片
    UDP协议
    tcp协议(三次握手 四次挥手)
    1956年人工智能元年,而今天是我进入人工智能的日子,哈哈哈
    对比文件简易代码
    爬取网站内容,存放到excel中
    Redis-Py 使用
    python list减法
    sort 使用key函数时,赋多个排序参数
  • 原文地址:https://www.cnblogs.com/softidea/p/3334433.html
Copyright © 2020-2023  润新知