Te recomendamos que pruebes esta resolución en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
La forma más fácil de verificar el rango es probablemente convertir las direcciones IP a números enteros de 32 bits y luego simplemente comparar los números enteros.
public class Example
public static long ipToLong(InetAddress ip)
byte[] octets = ip.getAddress();
long result = 0;
for (byte octet : octets)
result <<= 8;
result
return result;
public static void main(String[] args) throws UnknownHostException
long ipLo = ipToLong(InetAddress.getByName("192.200.0.0"));
long ipHi = ipToLong(InetAddress.getByName("192.255.0.0"));
long ipToTest = ipToLong(InetAddress.getByName("192.200.3.0"));
System.out.println(ipToTest >= ipLo && ipToTest <= ipHi);
Más bien que InetAddress.getByName()
es posible que desee ver la biblioteca Guava que tiene una clase auxiliar InetAddresses que evita la posibilidad de búsquedas de DNS.
El siguiente código, que usa la biblioteca de Java IPAddress (descargo de responsabilidad: soy el administrador del proyecto), maneja esto con direcciones IPv4 e IPv6, y también evita la búsqueda de DNS en cadenas no válidas.
Aquí hay un código de muestra con sus direcciones dadas, así como algunas direcciones IPv6:
static void range(String lowerStr, String upperStr, String str)
throws AddressStringException
IPAddress lower = new IPAddressString(lowerStr).toAddress();
IPAddress upper = new IPAddressString(upperStr).toAddress();
IPAddress addr = new IPAddressString(str).toAddress();
IPAddressSeqRange range = lower.toSequentialRange(upper);
System.out.println(range + " contains " + addr + " " + range.contains(addr));
range("192.200.0.0", "192.255.0.0", "192.200.3.0");
range("2001:0db8:85a3::8a2e:0370:7334", "2001:0db8:85a3::8a00:ff:ffff",
"2001:0db8:85a3::8a03:a:b");
range("192.200.0.0", "192.255.0.0", "191.200.3.0");
range("2001:0db8:85a3::8a2e:0370:7334", "2001:0db8:85a3::8a00:ff:ffff",
"2002:0db8:85a3::8a03:a:b");
Producción:
192.200.0.0 -> 192.255.0.0 contains 192.200.3.0 true
2001:db8:85a3::8a00:ff:ffff -> 2001:db8:85a3::8a2e:370:7334 contains 2001:db8:85a3::8a03:a:b true
192.200.0.0 -> 192.255.0.0 contains 191.200.3.0 false
2001:db8:85a3::8a00:ff:ffff -> 2001:db8:85a3::8a2e:370:7334 contains 2002:db8:85a3::8a03:a:b false