[Python] Connection aux routeurs et détection d'erreur

Connection aux routeurs et détection d'erreur [Python] - Python - Programmation

Marsh Posté le 22-11-2018 à 15:50:04    

Bonjour,
 
Je n'ai jamais programmé en Python, j'ai fait un peu de C, de PHP et je fais désormais un peu de VBA pour automatiser les traitements sous Excel.
 
Mon domaine étant le LAN/WAN, j'ai en charge de créer un script permettant de se connecter à des routeurs, de passer des commandes et de noter les routeurs qui donneront des erreurs aux commandes passées.
 
Pour être totalement transparent, j'ai pompé un script sur le net mais il ne fait pas la partie sur la détection d'erreur.
Un peu d'aide serait la bienvenue.
 
La demande est très inhabituelle, c'est juste qu'en attendant de pouvoir trouver le temps d'apprendre par moi-même le language, j'ai un délai max pour mon client.
 
Voici le script (le repompé)

Code :
  1. import sys
  2. import telnetlib
  3. HOST = ""
  4. user = ""
  5. password = ""
  6. tn = telnetlib.Telnet(HOST)
  7. tn.read_until("username: " )
  8. tn.write(user + "\n" )
  9. tn.read_until("password: " )
  10. tn.write(password + "\n" )
  11. n, match, previous_text = tn.expect([r'Login incorrect', r'\$'], 1)
  12. if n == 0:
  13.     print "Erreur Login/Pwd"
  14.     tn.close()
  15. else:
  16.     tn.write("Term len 0\n" )
  17.     with open("commands.txt" ) as commands:
  18.         singlecommand = commands.read()
  19.         tn.write(singlecommand)
  20.         print singlecommand
  21.     tn.write("exit\n" )
  22.     tn.write("y\n" )
  23.     print tn.read_all()
  24.     tn.close()


 
 

Reply

Marsh Posté le 22-11-2018 à 15:50:04   

Reply

Marsh Posté le 23-11-2018 à 17:34:12    

Bonsoir,
 
J'ai un peu amélioré le script, cependant, le contrôle d'erreur ne fonctionne pas et je ne vois pas pourquoi.
 

Code :
  1. #!/usr/local/Python-3.6.5/python
  2. import sys
  3. import telnetlib
  4. import re
  5. import base64
  6. HOST = ""
  7. user = ""
  8. password =""
  9. credentials_file = "/home2/admin/scripts/tools/router_show_commands-credentials.txt"
  10. commandes_file = "/home2/admin/scripts/tools/router_show_commands-commands.txt"
  11. credentials = None
  12. with open(credentials_file,"r" ) as f:
  13.         credentials = f.read().splitlines()
  14. user = base64.b64decode(credentials[0])
  15. password = base64.b64decode(credentials[1])
  16. tn = telnetlib.Telnet(HOST)
  17. tn.read_until(b"Username: " )
  18. tn.write(user + b"\n" )
  19. tn.read_until(b"Password: " )
  20. tn.write(password + b"\n" )
  21. n, match, previous_text = tn.expect([re.compile(b"Login incorrect", re.I), re.compile(b"\$" )], 1)
  22. if n == 0:
  23.     print ("Erreur Login/Pwd" )
  24.     tn.close()
  25. else:
  26.     tn.write(b"Term len 0\n" )
  27.     with open(commandes_file) as commands:
  28.         singleCommand = bytes(commands.read())
  29.         tn.write(singleCommand)
  30.         print (singleCommand)
  31.     try:
  32.         o = tn.expect(['#', '% Invalid'])
  33.         if o != 0:
  34.           raise OurException("ERREUR" )
  35.     except Exception:
  36.         print "TOUT EST OK"
  37.         pass
  38.     tn.write(b"exit\n" )
  39.     tn.write(b"y\n" )
  40.     print (tn.read_all().decode("ascii" ))
  41.     tn.close()


 
Dans le fichier "router_show_commands-commands.txt", lorsque j'y inclus volontairement un "sh titi", le script s'exécute de la façon suivante
 

Code :
  1. sh clock
  2. sh ver
  3. sh titi
  4. TOUT EST OK
  5. .....
  6. router#sh titi
  7.                     ^
  8. % Invalid input detected at '^' marker.
  9. router#exit


 
C'est comme s'il ne voyait pas l'erreur et je ne vois pas la mienne dans le script.
 
Merci de votre aide.


Message édité par kill9 le 23-11-2018 à 17:34:53
Reply

Marsh Posté le 28-11-2018 à 10:11:06    

Ok trouvé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed