Mostramos un sencillo script en Python que escanea la disponibilidad de las IP en un rango de red dado. Utiliza el comando ping y comprueba si los equipos responden al ping para un rango indicado.
- Script para escanear rango de IP con Python en Windows.
- Script para escanear rango de IP con Python en Linux.
- Script para escanear rango de IP con Python en Windows y Linux.
Script para escanear rango de IP con Python en Windows
A continuación mostramos el código Python que realizará las siguientes acciones:
- Pedirá un rango de IP, por ejemplo: 192.168.1
- Pedirá la IP inicial del rango, por ejemplo: 1
- Pedirá la IP final del rango, por ejemplo: 10
Con los datos anteriores, el script realizará un ping desde la IP 192.168.1.1 hasta la IP 192.168.1.10, mostrando el resultado (si el ping ha sido OK o no).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import os red = input("Introduzca una red (por ejemplo 192.168.1): ") if red =="": red = "192.168.1" rangoInicial = int(input("Introduzca el rango inicial (por ejemplo 1): ")) rangoFinal = int(input("Introduzca el rango final (por ejemplo 250): ")) if rangoInicial > rangoFinal: print("Debe indicar un rango inicial inferior al rango final") else: listaIP =[] # Lista de IP que responden al ping for i in range(rangoInicial, rangoFinal, 1): # Recorremos el rango de IP indicado ipEquipo = red + "." + str(i) print("Haciendo ping a IP " + ipEquipo, end=" ") rep = os.system("ping -n 1 " + ipEquipo + " > 1") if rep == 0: listaIP.append(ipEquipo) print("[OK]") else: print("[No responde]") print("Las IP que han respondido al ping: " + str(len(listaIP))) for i in range(len(listaIP)): print(listaIP[i]) |
Si ejecutamos el script Python anterior, con:
1 |
python.exe c:\ProyectoA_Python\red\escaner_ip.py |
Nos solicitará los datos (rango, ip inicial, ip final). Ejecutará el ping para cada IP del rango y mostrará el resultado:
Script para escanear rango de IP con Python en Linux
Un ejemplo del mismo script anterior, pero válido para Linux:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import os red = input("Introduzca una red (por ejemplo 192.168.1): ") if red =="": red = "192.168.1" rangoInicial = int(input("Introduzca el rango inicial (por ejemplo 1): ")) rangoFinal = int(input("Introduzca el rango final (por ejemplo 250): ")) if rangoInicial > rangoFinal: print("Debe indicar un rango inicial inferior al rango final") else: listaIP =[] # Lista de IP que responden al ping for i in range(rangoInicial, rangoFinal, 1): # Recorremos el rango de IP indicado ipEquipo = red + "." + str(i) print("Haciendo ping a IP " + ipEquipo, end=" ") rep = os.system("ping -c 1 " + ipEquipo + " > 1") if rep == 0: listaIP.append(ipEquipo) print("[OK]") else: print("[No responde]") print("Las IP que han respondido al ping: " + str(len(listaIP))) for i in range(len(listaIP)): print(listaIP[i]) |
Como se puede observar, en el script anterior sólo cambia el parámetro -n 1 por -c 1 en el ping, el resto es idéntico. Esto es así porque en Linux, para indicar el número de intentos en el comando ping, se usa -c en lugar de -n de Windows.
Script para escanear rango de IP con Python en Windows y Linux
Teniendo en cuenta lo anterior, fusionamos los dos script en uno para que sirva tanto para equipos Windows como Linux. Para ello sólo tendremos que obtener si estamos en Windows o Linux y cambiar el parámetro -c o bien -n del ping. El script para escanear una red por IP y ping válido para Windows y Linux, sería:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import os red = input("Introduzca una red (por ejemplo 192.168.1): ") if red =="": red = "192.168.1" rangoInicial = int(input("Introduzca el rango inicial (por ejemplo 1): ")) rangoFinal = int(input("Introduzca el rango final (por ejemplo 250): ")) # Obtenemos el sistema operativo, nt = windows, posix = Linux so = os.name if rangoInicial > rangoFinal: print("Debe indicar un rango inicial inferior al rango final") else: listaIP =[] # Lista de IP que responden al ping for i in range(rangoInicial, rangoFinal, 1): # Recorremos el rango de IP indicado ipEquipo = red + "." + str(i) print("Haciendo ping a IP " + ipEquipo, end=" ") if (so == "nt"): rep = os.system("ping -n 1 " + ipEquipo + " > 1") else: rep = os.system("ping -c 1 " + ipEquipo + " > 1") if rep == 0: listaIP.append(ipEquipo) print("[OK]") else: print("[No responde]") print("/n Las IP que han respondido al ping: " + str(len(listaIP))) for i in range(len(listaIP)): print(listaIP[i]) |