Python para leer IPs desde un archivo de texto y escribir en otro archivo de texto.
A pesar de que el programa que voy a describir a continuación sirve para una tarea en especifico, el mismo código puede reutilizarse para infinidad de tareas, en muchas ocasiones queremos leer contenido de un archivo de texto y generar otro basándonos en el primero, así que este programita lo pueden adaptar para este tipo de tareas y ahorrarles mucho trabajo.
Mi historia es la siguiente, surgió la necesidad de hacer una reservación masiva de direcciones IP en mi DHCP, como saben si se reserva una IP en el DHCP esa PC siempre recibirá la misma IP.
Mi escenario es el siguiente:
Tengo 8 Scopes
192.168.1.0
192.168.2.0
192.168.3.0
192.168.4.0
192.168.5.0
192.168.6.0
192.168.7.0
192.168.8.0
Tengo las MAC address, las IP's y un comentario en un archivo de Excel
Primero pensé en hacerlo manual usando la consola gráfica del server, pero son cerca de 600 entradas al DHCP así que si me puedo ahorrar unas horas estaría excelente.
La otra opción es hacerlas mediante comando pero sería mucho copiar y pegar.
La opción del comando es buena pero crearemos un programa en Python para que haga el trabajo pesado y no tengamos que estar copiando y pegando y cambiándonos de ventana.
Muy bien entonces el reto es el siguiente:
Tengo 600 IPs que tengo que agregar al DHCP, divididos en 8 scopes. El comando para agregar una reservación al DHCP es:
netsh dhcp server \\192.168.16.1 scope 192.168.16.0 add reservedip 192.168.16.100 001122334455 "Impresora Direccion"
Como lo describí en el artículo http://community.tsares.net/viewtopic.php?f=10&t=57
Ahora lo que mi programa tiene que hacer es lo siguiente:
1.- Preguntarme cual es el scope
2.- Abri el archivo perteneciente a ese scope
3.- Generar el comando tomando las IPs del archivo de texto
Yo tengo que hacer lo siguiente:
1.- Generar los archivos de scope por ejemplo scope-192.168.1.0.txt, 192.168.2.0.txt, etc
2.- Pegar en los archivos de texto mi datos, es decir IP, MAC Address, y un comentario ver ejemplo de archivo scope-192.168.1.0.txt abajo
3.- Ejecutar el programa por cada scope
4.- Copiar el resultado del programa generado en el archivo comando.txt a la línea de comandos del servidor DHCP
Lo primero que voy a hacer es copiar de Excel a un archivo de texto (notepad) las IPs de mi primer scope y quedaría mi archivo así:
------------------ scope-192.168.1.0.txt --------------------
192.168.1.20 00216b264dec "usuario1"
192.168.1.21 00215db966dc "usuario2"
192.168.1.22 001de00ebcc7 "usuario3"
192.168.1.23 0008742B84F3 "usuario4"
----------- <FIN> scope-192.168.1.0.txt --------------------
A continuación el contenido del programa
----------------- agregarDHCP.py ------------------------------
# Solicitamos el nombre del scope que también será el nombre del archivo
DHCP_scope = raw_input("Cual es el scope? ")
# Armamos el nombre del archivo que vamos a leer por ejemplo scope-192.168.1.0.txt
archivo = str('scope-') + DHCP_scope + str('.txt')
# Abrimos el archivo que vamos a leer ejemplo scope-192.168.1.0.txt
infile = open(archivo, 'r')
# Leemos cada linea del archivo
for IP in infile.readlines():
# Como el contenido del archivo de texto lo copiamos desde Excel
# Tenemos que remover los posibles tabuladores que hayan quedado en el archivo de texto
IP = IP.replace('\t', ' ')
# Abrimos el archivo donde se guardaran los comandos generados
miSalida = open('comando.txt', 'a')
# Generamos el comando
miSalida.write('netsh dhcp server \\\\192.168.16.1 scope ')
miSalida.write(DHCP_scope)
miSalida.write(' add reservedip ')
miSalida.write(IP)
# Cerramos el arhivo comando.txt
miSalida.close()
# Cerramos el archivo que se abrio como lectura ejemplo scope-192.168.1.0.txt
infile.close()
----------- <FIN> agregarDHCP.py ------------------------------
Recuerden que para ejecutar este programa deben que tener instalado Python y es gratis, lo pueden descargar desde http://www.python.org/download/
una vez instalado ejecuten:
C:\>python agregarDHCP.py
Les solicitará el scope teclearlo como se muestra abajo:
Cual es el scope? 192.168.1.0
En este caso el programa va a leer el contenido del archivo scope-192.168.1.0.txt y lo va acomodar para que nos de como resultado lo siguiente:
---- contenido del archivo comando.txt generado por el programa -------------------------------
netsh dhcp server \\192.168.16.1 scope 192.168.1.0 add reservedip 192.168.1.20 00216b264dec "usuario1"
netsh dhcp server \\192.168.16.1 scope 192.168.1.0 add reservedip 192.168.1.21 00215db966dc "usuario2"
netsh dhcp server \\192.168.16.1 scope 192.168.1.0 add reservedip 192.168.1.22 001de00ebcc7 "usuario3"
netsh dhcp server \\192.168.16.1 scope 192.168.1.0 add reservedip 192.168.1.23 0008742B84F3 "usuario4"
---- <FIN> contenido del archivo comando.txt generado por el programa ------------------------
Los archivos de texto del scope (por ejemplo scope-192.168.1.0.txt) deben estar en el mismo folder o el programa fallará al momento de ejecución
Para que hagan la prueba copien lo que está entre las líneas del archivo scope-192.168.1.0.txt y agregarDHCP.py a archivos de texto con esos nombres, pónganlos en la misma carpeta y ejecuten el archivo agregarDHCP.py para que vean como les genera el archivo comando.txt y a partir de ahí pueden comenzar a experimentar. Cuando copian y pegan del foro no respeta la identación vean la imagen anexa para que vean como debe quedar la identación (espacio o margen de las líneas del programa) del archivo agregarDHCP.py en caso contrario recibiran errores al momento de ejecutarlo.
Saludos,