mirror of
https://github.com/funkemunky/AntiVPN.git
synced 2026-06-01 01:41:55 +00:00
94 lines
2.7 KiB
Java
94 lines
2.7 KiB
Java
package dev.brighten.antivpn.utils;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigInteger;
|
|
import java.net.Inet4Address;
|
|
import java.net.Inet6Address;
|
|
import java.net.InetAddress;
|
|
import java.net.UnknownHostException;
|
|
import java.util.Optional;
|
|
|
|
public class IpUtils {
|
|
public static Optional<BigDecimal> getIpDecimal(String address) {
|
|
try {
|
|
InetAddress inet = InetAddress.getByName(address);
|
|
|
|
if(inet instanceof Inet4Address) {
|
|
return Optional.of(BigDecimal.valueOf(ipv4ToLong(address)));
|
|
} return Optional.of(new BigDecimal(ipv6ToDecimalFormat(address)));
|
|
} catch(Exception e) {
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
public static long ipv4ToLong(String address) {
|
|
String[] addrArray = address.split("\\.");
|
|
|
|
long ipDecimal = 0;
|
|
|
|
for (int i = 0; i < addrArray.length; i++) {
|
|
|
|
int power = 3 - i;
|
|
ipDecimal += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power)));
|
|
}
|
|
|
|
return ipDecimal;
|
|
}
|
|
|
|
public static String getIpv4(long ip) {
|
|
StringBuilder sb = new StringBuilder(15);
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
sb.insert(0, ip & 0xff);
|
|
|
|
if (i < 3) {
|
|
sb.insert(0, '.');
|
|
}
|
|
|
|
ip >>= 8;
|
|
}
|
|
|
|
return sb.toString();
|
|
}
|
|
|
|
public static boolean isIpv4(BigDecimal ip) {
|
|
return ip.compareTo(BigDecimal.valueOf(4294967295L)) <= 0;
|
|
}
|
|
|
|
public static boolean isIpv6(BigDecimal ip) {
|
|
return ip.compareTo(BigDecimal.valueOf(4294967295L)) > 0;
|
|
}
|
|
public static boolean isIpv4(String ip) {
|
|
return ip.matches("^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$");
|
|
}
|
|
|
|
public static boolean isNotIp(String ip) {
|
|
return !isIpv4(ip) && !isIpv6(ip);
|
|
}
|
|
|
|
public static boolean isIpv6(String ip) {
|
|
return ip.matches("^([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4}|:)$|^(([0-9a-fA-F]{1,4}:){0,6}([0-9a-fA-F]{1,4}|:))?(::([0-9a-fA-F]{1,4}:){0,5}([0-9a-fA-F]{1,4}|:))?$");
|
|
}
|
|
|
|
public static String getIpv4(BigDecimal ip) {
|
|
try {
|
|
return Inet4Address.getByAddress(ip.toBigInteger().toByteArray()).getHostAddress();
|
|
} catch (UnknownHostException e) {
|
|
return "Error";
|
|
}
|
|
}
|
|
|
|
public static String getIpv6(BigDecimal ip) {
|
|
try {
|
|
return Inet6Address.getByAddress(ip.toBigInteger().toByteArray()).getHostAddress();
|
|
} catch (UnknownHostException e) {
|
|
return "Error";
|
|
}
|
|
}
|
|
|
|
public static BigInteger ipv6ToDecimalFormat(String ipAddress) throws UnknownHostException {
|
|
return new BigInteger(1, Inet6Address.getByName(ipAddress).getAddress());
|
|
}
|
|
|
|
}
|