/** * parse IPV4 ARPA domain to IP bytes. * * @param name an ARPA string. * @return ARPA. */ private static NetworkInBytes parseIpV4Arpa(String name) { LOGGER.debug("parseInAddrArpa, name:" + name); String arpa = StringUtils.removeEndIgnoreCase(name, CHAR_DOT + DomainUtil.IPV4_ARPA_SUFFIX); arpa = StringUtils.reverseDelimited(arpa, CHAR_DOT); String[] arpaLabels = StringUtils.split(arpa, CHAR_DOT); int mask = arpaLabels.length * 8; String[] ipLabels = new String[BYTE_SIZE_IPV4]; for (int i = 0; i < BYTE_SIZE_IPV4; i++) { if (i < arpaLabels.length) { ipLabels[i] = arpaLabels[i]; } else { ipLabels[i] = "0"; } } String networkStr = StringUtils.join(ipLabels, CHAR_DOT) + "/" + mask; return IpUtil.parseNetworkV4(networkStr); }
/** * parse IPV6 ARPA domain to IP bytes. * * @param name an ARPA string. * @return ARPA. */ private static NetworkInBytes parseIpV6Arpa(String name) { LOGGER.debug("parseIp6Arpa, name:" + name); String arpa = StringUtils.removeEndIgnoreCase(name, CHAR_DOT + DomainUtil.IPV6_ARPA_SUFFIX); arpa = StringUtils.remove(arpa, CHAR_DOT); String ip = StringUtils.reverse(arpa); String fullIp = StringUtils.rightPad(ip, 32, '0'); byte[] startIpBytes = DatatypeConverter.parseHexBinary(fullIp); int networkMask = StringUtils.length(arpa) * 4; IPv6Address fromByteArray = IPv6Address.fromByteArray(startIpBytes); IPv6Network network = IPv6Network.fromAddressAndMask( fromByteArray, IPv6NetworkMask.fromPrefixLength(networkMask)); NetworkInBytes result = new NetworkInBytes( IpVersion.V6, network.getFirst().toByteArray(), network.getLast().toByteArray()); return result; }