Saltar al contenido

Calcule si una dirección IP está en un rango específico en Java

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *