Realizar Conversiones de IP y Máscara de Subred en Python
En este paso, utilizarás el intérprete interactivo de Python para realizar varias conversiones clave de redes. Aprenderás a convertir direcciones IP entre formatos decimal con puntos (dotted-decimal) y binario, y cómo traducir máscaras de subred CIDR a sus representaciones binarias y decimales con puntos completas. Todo esto se hará en una única sesión continua para agilizar el proceso.
Una dirección IPv4 es un número de 32 bits. Para que sea legible para los humanos, se representa como cuatro números de 8 bits, llamados octetos, separados por puntos (por ejemplo, 192.168.1.10). Cada uno de estos octetos se puede convertir a un número binario de 8 bits.
-
Primero, abramos la terminal e iniciemos el intérprete interactivo de Python. El entorno LabEx tiene Python preinstalado. Escribe python3 y presiona Enter.
python3
Verás un nuevo prompt, >>>, que indica que ahora estás dentro del intérprete de Python.
Python 3.10.x (...)
Type "help", "copyright", "credits" or "license" for more information.
>>>
Convertir una Dirección IP de Decimal con Puntos a Binario
-
Practiquemos la conversión de un solo número decimal a su forma binaria. Usaremos la función incorporada bin() de Python. Por ejemplo, para convertir el número 192, escribe lo siguiente en el prompt de Python:
bin(192)
Python devolverá la representación binaria, prefijada con 0b para indicar que es un número binario.
'0b11000000'
El equivalente binario de 192 es 11000000.
-
Ahora, apliquemos esto a una dirección IP completa, por ejemplo, 192.168.1.10. Necesitamos convertir cada octeto (192, 168, 1 y 10) individualmente. Una regla crítica en el direccionamiento IP es que cada octeto debe representarse con exactamente 8 bits. Si un número binario tiene menos de 8 bits, debes agregar ceros a la izquierda para rellenarlo.
Convirtamos cada parte:
- Para
192: bin(192) da '0b11000000'. Esto ya son 8 bits: 11000000.
- Para
168: bin(168) da '0b10101000'. Esto también son 8 bits: 10101000.
- Para
1: bin(1) da '0b1'. Debemos rellenarlo a 8 bits: 00000001.
- Para
10: bin(10) da '0b1010'. Debemos rellenarlo a 8 bits: 00001010.
Al combinar estos, obtienes la representación binaria completa de 32 bits de la dirección IP 192.168.1.10:
11000000.10101000.00000001.00001010
Convertir una Dirección IP Binaria de Vuelta a Decimal con Puntos
-
Ahora realizaremos la operación inversa. Para convertir un número binario a decimal, usaremos la función int() de Python. Esta función puede tomar dos argumentos: el primero es el número como una cadena (string), y el segundo es la base de ese número. Dado que estamos convirtiendo desde binario (base-2), siempre usaremos 2 como segundo argumento.
Intentemos convertir un solo octeto binario, 10101000, a decimal.
int('10101000', 2)
Python ejecutará la conversión y mostrará el resultado decimal.
168
-
Ahora, convirtamos la dirección IP binaria completa de 32 bits del paso anterior: 11000000.10101000.00000001.00001010. Necesitarás convertir cada octeto de 8 bits uno por uno.
- Convierte el primer octeto:
int('11000000', 2) que resulta en 192.
- Convierte el segundo octeto:
int('10101000', 2) que resulta en 168.
- Convierte el tercer octeto:
int('00000001', 2) que resulta en 1.
- Convierte el cuarto octeto:
int('00001010', 2) que resulta en 10.
Al combinar estos resultados con puntos, obtienes la dirección IP original en decimal con puntos: 192.168.1.10. Esto confirma que tus conversiones en ambas direcciones son correctas.
Una máscara de subred es un número de 32 bits que distingue la porción de red de una dirección IP de la porción de host. La notación CIDR (Classless Inter-Domain Routing) es una forma abreviada de representar una máscara de subred.
Por ejemplo, una notación CIDR de /24 significa que los primeros 24 bits de la máscara de subred de 32 bits son 1s, y los bits restantes son 0s.
-
Determinemos la representación binaria y decimal con puntos para una máscara de subred /24.
- Binario: Una máscara
/24 tiene 24 1s consecutivos seguidos de 32 - 24 = 8 0s. Cuando se divide en octetos, se ve así:
11111111.11111111.11111111.00000000
-
Ahora, convirtamos esta máscara binaria a su forma decimal con puntos. El primer octeto son todos unos, 11111111.
int('11111111', 2)
La salida será 255. El último octeto son todos ceros, 00000000.
int('00000000', 2)
La salida será 0. Por lo tanto, una máscara de subred /24 es 255.255.255.0 en notación decimal con puntos.
-
Intentemos un ejemplo más complejo, como /26.
- Binario: Una máscara
/26 tiene 26 1s seguidos de 32 - 26 = 6 0s.
11111111.11111111.11111111.11000000
- Los primeros tres octetos son todos
1s, que sabemos que es 255. Convirtamos el último octeto, 11000000, a decimal.
int('11000000', 2)
La salida será 192. Por lo tanto, una máscara de subred /26 es 255.255.255.192 en notación decimal con puntos.
-
Una vez que hayas terminado con las conversiones, puedes salir del intérprete de Python y volver al prompt de la terminal normal escribiendo exit() y presionando Enter.
exit()
Ahora has dominado la conversión bidireccional entre direcciones IP en decimal con puntos y binario, y máscaras de subred CIDR, una habilidad crucial para cualquier profesional de redes.