import re
import random
import json
import nltk
from nltk.chat.util import Chat, reflections
import netmiko
import paramiko
# Téléchargement des ressources NLTK nécessaires
nltk.download('punkt')
class NetworkRoutingChatbot:
def __init__(self):
# Configuration des équipements réseau
self.network_devices = {}
# Modèle de conversation
self.conversation_patterns = [
# Connexion et gestion des équipements
(r'connecte(?:r)? (?:au )?routeur ([\w\.\-]+)',
self.connect_to_router),
(r'ajoute(?:r)? un routeur', self.add_router),
(r'liste(?:r)? (?:mes )?routeurs', self.list_routers),
# Tâches de configuration
(r'montre(?:r)? (?:la )?configuration', self.show_router_config),
(r'modifie(?:r)? (?:la )?route', self.modify_route),
(r'ajoute(?:r)? (?:une )?route', self.add_route),
# Diagnostics réseau
(r'ping ([\w\.\-]+)', self.perform_ping),
(r'trace(?:route)? ([\w\.\-]+)', self.perform_traceroute),
# Gestion générale
(r'aide', self.show_help),
(r'au secours', self.show_help)
]
# Initialisation du chat
self.chatbot = Chat(self.conversation_patterns, reflections)
def connect_to_router(self, router_name):
"""Connexion à un routeur existant"""
if router_name in self.network_devices:
device = self.network_devices[router_name]
try:
connection = netmiko.ConnectHandler(**device)
return f"Connecté avec succès au routeur {router_name}"
except Exception as e:
return f"Erreur de connexion : {str(e)}"
return f"Routeur {router_name} non trouvé"
def add_router(self, *args):
"""Assistant pour ajouter un nouveau routeur"""
print("Ajoutons un nouveau routeur. Répondez aux questions suivantes :")
nom = input("Nom du routeur : ")
ip = input("Adresse IP : ")
username = input("Nom d'utilisateur : ")
password = input("Mot de passe : ")
type_routeur = input("Type de routeur (cisco_ios, juniper, etc.) : ")
new_device = {
'device_type': type_routeur,
'host': ip,
'username': username,
'password': password
}
self.network_devices[nom] = new_device
return f"Routeur {nom} ajouté avec succès"
def list_routers(self, *args):
"""Liste tous les routeurs configurés"""
if not self.network_devices:
return "Aucun routeur configuré"
return "Routeurs configurés :\n" + "\n".join(self.network_devices.keys())
def show_router_config(self, *args):
"""Affiche la configuration d'un routeur"""
if not self.network_devices:
return "Aucun routeur configuré"
nom_routeur = input("Quel routeur voulez-vous configurer ? ")
if nom_routeur in self.network_devices:
try:
connection =
netmiko.ConnectHandler(**self.network_devices[nom_routeur])
config = connection.send_command("show running-config")
return config
except Exception as e:
return f"Erreur lors de la récupération de la configuration :
{str(e)}"
return f"Routeur {nom_routeur} non trouvé"
def modify_route(self, *args):
"""Modification de route réseau"""
return "Fonction de modification de route en cours de développement"
def add_route(self, *args):
"""Ajout d'une nouvelle route"""
return "Fonction d'ajout de route en cours de développement"
def perform_ping(self, target):
"""Réalise un ping vers une destination"""
try:
import subprocess
result = subprocess.run(['ping', '-c', '4', target],
capture_output=True, text=True)
return result.stdout
except Exception as e:
return f"Erreur lors du ping : {str(e)}"
def perform_traceroute(self, target):
"""Réalise un traceroute vers une destination"""
try:
import subprocess
result = subprocess.run(['traceroute', target], capture_output=True,
text=True)
return result.stdout
except Exception as e:
return f"Erreur lors du traceroute : {str(e)}"
def show_help(self, *args):
"""Affiche l'aide et les commandes disponibles"""
help_text = """
🤖 Assistant Réseau - Commandes Disponibles 🌐
Gestion des Routeurs :
- 'connecter au routeur [nom]'
- 'ajouter un routeur'
- 'lister mes routeurs'
Configuration :
- 'montrer la configuration'
- 'modifier la route'
- 'ajouter une route'
Diagnostics :
- 'ping [adresse]'
- 'traceroute [adresse]'
Autres :
- 'aide' ou 'au secours' pour afficher ce menu
"""
return help_text
def start_chat(self):
"""Lance l'interface de chat interactive"""
print("🤖 Bonjour ! Je suis votre assistant d'automatisation réseau.")
print("Tapez 'aide' pour voir les commandes disponibles.")
while True:
user_input = input("\n> ")
if user_input.lower() in ['quit', 'exit', 'bye']:
print("Au revoir ! 👋")
break
response = self.chatbot.respond(user_input)
print(response)
def main():
chatbot = NetworkRoutingChatbot()
chatbot.start_chat()
if __name__ == "__main__":
main()