Determine si la IP de la intranet es la misma subred

Directorio de artículos

principio

Determine si las dos direcciones IP están en el mismo segmento de red y realice una operación AND entre sus direcciones IP y la máscara de subred , y el resultado es el número de red/dirección de red . Si los números de red son iguales, están en el misma subred, de lo contrario, no en la misma subred.

Por ejemplo :

Dirección IP1 : 10.140.201.14900001010.10001100.11001001.10010101

Máscara de subred : 255.255.254.011111111.11111111.11111110.00000000

y el resultado es : 10.140.200.000001010.10001100.11001000.00000000

Dirección IP2 : 10.140.200.2600001010.10001100.11001000.00011010

Máscara de subred : 255.255.254.011111111.11111111.11111110.00000000

y el resultado es : 10.140.200.000001010.10001100.11001000.00000000

Los resultados ( dirección de red/número de red ) de las dos direcciones IP y la misma máscara de subred son los mismos, por lo que se puede juzgar que las dos direcciones IP están en la misma subred.

Máscara de subred : 255.255.254.011111111.11111111.11111110.00000000

La máscara de subred y la IP de una de ellas las proporciona el administrador de la red.

La dirección IP se divide en número de red + número de host

El número de red es el resultado de AND: 10.140.200.0, y el segmento del número de host es el número de dígitos 0 después de la máscara de subred. Por ejemplo, es 2 elevado a la 9ª potencia = 512.

Rango de direcciones IP : 0.0.0.0~255.255.255.255, incluida la dirección de la máscara.

División de direcciones IP
Dirección de clase A: 1.0.0.1~126.255.255.254
Dirección de clase B: 128.0.0.1~191.255.255.254
Dirección de clase C: 192.168.0.0~192.168.255.255
Dirección de clase D: 224.0.0.1~239.255.255.254
Dirección de clase E: 240.0.0.1~255.255.255.254

Hay dos formas de expresar la máscara de subred:

  • notación decimal punteada

    • Máscara de subred predeterminada de red Clase A: 255.0.0.0

    • La máscara de subred de la red de clase B es: 255.255.0.0

    • La máscara de subred de una red de clase C es: 255.255.255.0

    • La máscara de subred predeterminada es: 255.255.255.0

  • notación CIDR

    Agregue una barra inclinada (/) y un rango de máscara de 1 32 después de la dirección IP , donde 1 32 representa la longitud de los bits de identificación de red en la máscara de subred.

    Por ejemplo, 192.168.0.3/24.

    /24De hecho, los primeros 24 bits son todos 1, que es la máscara de subred 255.255.255.0

    • 11111111.11111111.11111111.00000000

CIDR

CIDR (enrutamiento entre dominios sin clases) es un nuevo método de direccionamiento en Internet. En comparación con los modos de direccionamiento tradicionales de clase A, clase B y clase C, CIDR es más eficiente en la asignación de direcciones IP. CIDR adopta la notación de barra inclinada, que se expresa como: el número de dígitos de la dirección IP/ID de red.

  • Ejemplo 1: convertir formato CIDR a segmento de red de dirección IP

    Por ejemplo, 10.0.0.0/8 se convierte en una dirección binaria de 32 bits: 00001010.00000000.00000000.00000000.

    Entre ellos, /8 representa una ID de red de 8 bits, es decir, los primeros 8 bits de la dirección binaria de 32 bits son fijos y el segmento de red correspondiente es: 00001010.00000000.00000000.00000000 00001010.11111111.11111111.11111111 . Después de la conversión a decimal, 10.0.0.0/8 significa: la máscara de subred es 255.0.0.0 y el segmento de red correspondiente es 10.0.0.0 10.255.255.255.

  • Ejemplo 2: convertir segmento de dirección IP a formato CIDR

    Por ejemplo, 192.168.0.0 192.168.31.255, los dos últimos segmentos de IP se convierten en direcciones binarias: 00000000.00000000 00011111.11111111, se puede concluir que los primeros 19 dígitos (8*2+3) son fijos, luego se convierten en formato CIDR, expresado como: 192.168.0.0/19.

Las herramientas de cálculo de CIDR son excelentes si desea determinar fácilmente a qué rango de IP es igual una dirección CIDR en particular. Simplemente ingrese la dirección CIDR en la herramienta y haga clic en Calculate. Esto devolverá información como la primera IP, la última IP, la cantidad de hosts, etc.

Código

public class IpSubnet {
    
    
    public static void main(String[] args) throws UnknownHostException {
    
    
        System.out.println(matches("10.140.200.26", "10.140.201.149", "255.255.254.0"));
    }
    public static boolean matches(String ip1, String ip2, String mask) throws UnknownHostException {
    
    
        InetAddress ipAddress1 = InetAddress.getByName(ip1);
        InetAddress ipAddress2 = InetAddress.getByName(ip2);
        InetAddress subnetMask = InetAddress.getByName(mask);
        int subnetMastInt = ipToInt(subnetMask);
        int networkAddress = ipToInt(ipAddress1) & subnetMastInt;
        int ipAddress = ipToInt(ipAddress2);

        return (ipAddress & subnetMastInt) == networkAddress;
    }
    private static int ipToInt(InetAddress ipAddress) {
    
    
        byte[] octets = ipAddress.getAddress();
        assert octets.length == 4;

        return (octets[0] & 0xff) << 24 |
                (octets[1] & 0xff) << 16 |
                (octets[2] & 0xff) << 8 |
                octets[3] & 0xff;
    }
}

referencia

  • https://gist.github.com/gythialy/1ebbde7ba680e76fbee4

Guess you like

Origin blog.csdn.net/abu935009066/article/details/130081640