8
03/05/2010 Rapport Projet Script Python, SNMP, interrogation d'un commutateur et lien avec le DHCP Réalisé par: ABDELLI Samir Université d'Évry- Informatique M1 ASR 1

SNMP in Action 1

Embed Size (px)

DESCRIPTION

SNMP in action programmed with python (interaction with à router/switch), Basic programming

Citation preview

Page 1: SNMP in Action 1

03/05/2010

Rapport ProjetScript Python, SNMP,

interrogation d'un commutateur et lien avec le

DHCP

Réalisé par:ABDELLI Samir

Université d'Évry- Informatique M1 ASR 1

Page 2: SNMP in Action 1

Les fonctions du script:

Chaque fonctions est décrite sur le script.

• def __macIp_show(self, dhcpfile, agent, community, oid): fonction principale

• def __get_MacColon(self, dhcpfile): fonction qui génère un fichier temporaire de fichier dhcp original et qui détecte les anomalies et les erreurs (comme une adresse MAC à plus de 48 octets)

• def __double_mac_error(self): Détection des entrée "Double" dans le fichier DHCP. Les anomalies seront retournées dans une liste "double_mac_error"

• def __double_dns_error(self): Détection des entrée "Double" dans le fichier DHCP. Les anomalies seront retournées dans une liste "double_dns_error"

• def __fill_Zeros(self, mac_addr): fonction qui rajoute des zéros dans les adresses MAC.Exemple: __ _ ( : : : : : ) : : : : :fill Zeros 0 4A 3 3B 4 AC renvoie MAC = 00 4A 03 3B 0 AC

• def __get_HostIpName(self, ip_addr): fonction qui prend une adresse (ou nom DNS) et qui renvoie le nom DNS (ou l'adresse IP)

• def __get_dnsReverse(self, ip_addr): fonction qui vérifie la présence d'une entrée inversée pour un nom DNS ou une adresse IP

• def __get_device_Port(self, mac, community, agent, oid): fonction qui renvoie le port de connexion d'un hôte en connaissant son adresse MAC

• def __color(self, color): affichage des couleurs (texte)

• def __help_use(self): fonction qui affiche l'aide de lancement de script

Université d'Évry- Informatique M1 ASR 2

Page 3: SNMP in Action 1

Schéma d'exécution:

Remarque: le schéma ci-dessus présente uniquement les étapes clés du script. Le script créera, au fur et à mesure, plusieurs listes et interrogera plusieurs tables au cours de son exécution.

Université d'Évry- Informatique M1 ASR 3

Table Bridge de l'agent SNMP(MAC, PORT)

Table ARP de l'agent SNMP

(MAC, IP)

Liste Success(MAC, IP, PORT)

Liste Fail(MAC, PORT)

Fichier DHCP (MAC, IP/DNS)

Comparaison des adresses MAC

Comparaison des adresses MAC

Liste New Fail(MAC, PORT)

Liste Success(MAC, IP, PORT)

1 2

3

6

5

7

98

4

Update

Page 4: SNMP in Action 1

Explications:

Les étapes suivante décrit le schéma de fonctionnement du script:

(1) On récupère dans cette étape la liste des adresses MAC reliées au le commutateur. Cette fonction retourne l'adresse MAC et le Port de associé

(2) On récupère à partir de cette table la liste des adresses MAC dans la cache ARP du commutateur. Cette fonction retourne l'adresse MAC et l'adresse IP associé d'un poste qui fait des requête de connexion

(3) Ici, le but est de rechercher les adresses IP des hôtes connectés au commutateur qui sont présents, à la fois, dans la table dot1dBridge « (étape 1) et la cache ARP du commutateur(étape 2). En sortie il y aura deux liste: « Success » et « Fail »

(4) Cette liste « Success »contient les hôtes connectés au commutateur et qui sont dans la cache ARP du commutateur. Donc, cette liste ne contient que des MAC et son adresse IP associé.

(5) Cette liste « Fail » contient toute les adresses MAC présentes sur le commutateur mais qui ne sont pas dans la cache ARP du commutateur

(6) Le fichier « DHCP » fournit est modifié afin d'avoir un fichier pré-traité qui contient sur chaque ligne l'adresse MAC et soit un nom DNS ou une adresse IP

(7) Dans cette étape, l'intérêt est de comparer le contenu de la liste « Fail » créée à l'étape (5) au fichier « DHCP » créé à l'étape (6). Cette comparaison consiste à récupérer à partir du fichier « DHCP » les nom DNS ou les adresses IP(selon la ligne) qui correspondent aux adresse MAC présents dans la liste « Fail ». Cette opération de comparaison renvoie une nouvelle liste appelée liste « New Fail » et une mise à jour de la liste « Success »

(8) Cette liste est une mise à jour de la liste « Success ». Cela dit, cette liste va contenir de nouveaux éléments qui contiennent des adresses MAC des hôtes présents sur le commutateur et soit un nom DNS soit une adresse IP. Avec toutes ces information sur un hôte, il est possible de faire des contrôles de cohérence entre les résultats trouvés et le contenu du fichier « DHCP ».

(9) Cette deuxième liste contient la liste des adresses MAC des hôtes connectés au commutateur. Ces adresses n'ont aucune occurrence ni dans la cache ARP du commutateur ni dans le fichier DHCP. Autrement dit, ces adresses MAC ne sont pas inscrites dans le fichier « DHCP ».

Remarques et commentaires sur les résultats du script python:

Ce script détecte les anomalies dans le fichier « DHCP_File » et les affiche au début des résultats d'exécution(erreur de format de l'adresse MAC, même nom DNS avec plusieurs adresses MAC ou bien la même adresse MAC pour plusieurs noms DNS). Le problème est au niveau de l'étape (7). En effet, le fait de récupérer une adresse IP ou un nom DNS à partir du fichier « DHCP », qui correspond à une adresse MAC d'un hôte connecté au commutateur, n'est pas forcement juste et donc non sure. Et

Université d'Évry- Informatique M1 ASR 4

Page 5: SNMP in Action 1

comme il n'existe aucun moyen de vérifier la cohérence avec le fichier DHCP pour toute les adresses MAC(car ce dernier résultat est obtenu lui même à partir du fichier « DHCP »). Une solution peut être proposée (Voir la section suivante).

Ce script dispose également d'un mode « OFFLINE » de test, à condition d'avoir deux fichier, qui sont:• « Bridge.txt »: contient les adresse MAC présentes sur le commutateur , le format de fichier est

que sur chaque ligne on doit avoir le format suivant « Test_Me = Hex-STRING: 00:04:23:9A:8D:8A » pour chaque adresse MAC

• « Arp.txt »: contient les adresse MAC et IP de machine présentes dans la cache ARP du commutateur. Le format de ce fichier est le suivant « 192.168.195.2 = STRING: 00:04:23:9A:8D:8A », l'adresse IP associé à chaque adresse MAC.

Propositions:

Afin de remédier au problème cité ci-haut, on peut faire:1. Faire un ping de broadcast: « ping -b adresse_broadcast », ex: ping -b 192.168.195.2552. Ce ping envoie des requêtes ICMP vers l'adresse broadcast.3. Après une période de temps pré-définit, c'est le tour de consulter le contenu de la cache ARP du

hôte local avec la commande « arp », qui affichera une table contenant les adresses MAC et leurs noms DNS ou adresses IP, qui ont pus répondre à la requête ICMP.

4. Et à partir de ce résultat on compare nos résultats obtenu avec ceux du fichier « DHCP » on ne choisissant que les adresses MAC présentes dans la table dot1dBridge du commutateur.

Ou, encore, faire un scan d'adresse IP « scan de la plage 192.168.195.1 à 192.168.195.254 » puis chercher les adresses mac et leurs IP ou noms DNS correspondants

Les limites de ce script python:

Ce que ce script ne fait pas:1. Ce script n'implémente pas la proposition précédentes (découvrir les adresses IP à partir des

adresse MAC).2. Ce script prend par défaut le serveur DNS de la machine à partir de laquelle il a été lancé.3. Les erreurs fatales(adresse MAC qui n'est pas en bon format) sont ignorées au cours du

traitement mais les anomalies ne le sont pas(même MAC avec plusieurs noms DNS et même nom DNS avec plusieurs adresses MAC)

Conditions d'exécution:

Installer Net-SNMP(netsnmp-utils) pour utiliser la commande « snmpwalk »présence dans le réseau d'un serveur DNS(pour éviter les temps de réponse sans réponse de serveur DNS).

Pour utiliser le mode OFFLINE de test(en localhost):• Ce mode est lancé dans le cas où la table « Bridge » est vide• présence des fichiers « Bridge.txt » et « ARP.txt » (présents dans le dossier de ce script)• modifier(si ce n'est pas déjà le cas) le fichier « /etc/resolv.conf » en mettant la valeur de

Université d'Évry- Informatique M1 ASR 5

Page 6: SNMP in Action 1

« nameserver » à « localhost »(éviter les temps d'attente)Exemple d'exécution:

commande : « ./dncp.py -agent 192.168.195.11 -community asr -dhcpfile dhcp.txt »

++++++ MAC & IP Address Table for 192.168.195.11 ++++++ Errors in 'dhcp.txt': Solution -> Not treated *line 246: hardware ethernet 00:1D:09E:04:B4:5A;fixed-address 192.168.195.201; ------------------------------------------------------------------------------------------------------------------------------------------------------ ------- | MAC | IP |Port| DNS Name |in DHCP |DNS_REVERSE | Notes----------------------------------------------------------------------------------------------------------------------------------------------------- -------- * 00:04:23:9A:8D:8A | 192.168.195.2 |46 | NEWGW-ASR195 | NO | NOERROR | NOCOH*(!!!) ----------------------------------------------------------------------------------------------------------------------------------------------------- -------- * 00:0C:29:1F:2F:9A | 192.168.195.136 |13 | UNKNOWN | NO | FAILED | NOCOH*(!!!) ----------------------------------------------------------------------------------------------------------------------------------------------------- -------- * 00:0C:29:A2:BC:13 | 192.168.195.170 |14 | UNKNOWN | NO | FAILED | NOCOH*(!!!) ---------------------------------------------------------------------------------------------------------------------------------------------------- --------- * 00:1F:29:36:54:B7 | 192.168.195.51 |02 | ASRC130-1 | YES | NOERROR | OK (ASRC130-1) ------------------------------------------------------------------------------------------------------------------------------------------------------ ------- * 00:1F:29:36:54:B7 | 192.168.195.51 |02 | ASRC130-1 | NO | NOERROR | NOCOH*(!!!) ------------------------------------------------------------------------------------------------------------------------------------------------------ ------- * 00:1F:29:36:55:14 | 192.168.195.53 |04 | ASRC130-3 | YES | NOERROR | OK (ASRC130-3) ------------------------------------------------------------------------------------------------------------------------------------------------------ ------- * 00:1F:29:36:55:14 | 192.168.195.53 |04 | ASRC130-3 | NO | NOERROR | NOCOH*(!!!) ------------------------------------------------------------------------------------------------------------------------------------------------------ ------- * 00:1F:29:36:55:4E | 192.168.195.54 |05 | ASRC130-4 | YES | NOERROR | OK (ASRC130-4) -------------------------------------------------------------------------------------------------------------------------------------------------------- ----- * 00:1F:29:36:55:4E | 192.168.195.54 |05 | ASRC130-4 | NO | NOERROR | NOCOH*(!!!) ---------------------------------------------------------------------------------------------------------------------------------------------------------- ---* 00:1F:29:36:5A:7D | 192.168.195.64 |15 | ASRC130-14 | YES | NOERROR | OK (ASRC130-14) -------------------------------------------------------------------------------------------------------------------- -----------------------------------------* 00:1F:29:36:5A:7D | 192.168.195.64 |15 | ASRC130-14 | NO | NOERROR | NOCOH*(!!!) ------------------------------------------------------------------------------------------------------------------------------------------------------------- * 00:12:3F:8F:41:CB | 192.168.196.183|46 | C141-21 | YES | NOERROR | OK (C141-21) ------------------------------------------------------------------------------------------------------------------------------------------------------------- * 00:12:3F:8F:41:CB | 192.168.196.183|46 | C141-21 | YES | NOERROR | NOCOH FOUND (ASC141-21) ------------------------------------------------------------------------------------------------------------------------------------------------------------- * 00:12:3F:8F:41:CB | 192.168.196.183|46 | C141-21 | NO | NOERROR | NOCOH*(!!!) --------------------------------------------------------------------------------------------------------------------------------------------------------- ---- * 00:1F:29:36:7F:37 | 192.168.195.63 |14 | ASRC130-13 | YES | NOERROR | OK (ASRC130-13) -------------------------------------------------------------------------------------------------------------------------------------------------------- ----- * 00:1F:29:36:7F:37 | 192.168.195.63 |14 | ASRC130-13 | NO | NOERROR | NOCOH*(!!!) -------------------------------------------------------------------------------------------------------------------------------------------------------- ----- * 00:0F:CB:A3:7B:E0 | UNKNOWN |46 | UNKNOWN | NO | FAILED | NOCOH** (NO IP FOUND) ----------------------------------------------------------------------------------------------------------------------------------------------------------- -- * 00:23:AB:22:30:01 | UNKNOWN |46 | UNKNOWN | NO | FAILED | NOCOH** (NO IP FOUND) ---------------------------------------------------------------------------------------------------------------------------------------------------------- --- * 00:21:9B:E0:A1:66 | UNKNOWN |13 | UNKNOWN | NO | FAILED | NOCOH** (NO IP FOUND) ----------------------------------------------------------------------------------------------------------------------------------------------------------- -- * 00:23:AB:22:6B:01 | UNKNOWN |46 | UNKNOWN | NO | FAILED | NOCOH** (NO IP FOUND) ------------------------------------------------------------------------------------------------------------------------------------------------------------ - * 00:23:AB:BB:E6:83 | UNKNOWN |46 | UNKNOWN | NO | FAILED | NOCOH** (NO IP FOUND) ----------------------------------------------------------------------------------------------------------------------------------------------------------- --

MAC :• adresses MAC des hôtes connectés au commutateur

IP :• adresses IP des hôtes connectés au commutateur

PORT :

Université d'Évry- Informatique M1 ASR 6

Page 7: SNMP in Action 1

• numéro de port su le commutateur Status :

• état "connecté" (ON) ou "non connecté" (OFF) , malheureusement cette colonne ne montre pas les hôtes connectes. En effet la valeur de cette colonne sont tirées directement de la cache ARP du commutateur c'est_à-dire les hôtes qui veulent se connecté au commutateur (établir une connexion) et pour cela un hôte doit échangé avec le commutateur des requêtes ARP, cependant cette table n'est pas conservée trop longtemps et donc de cette façon on ne peut pas savoir si le hôte est connecté ou pas. D'une autre manière, on peut le savoir par le déclenchement d'une requête ICMP avec un ping <ping hôte> et de savoir si le hôte correspondant est allumé ou pas. Il faut signaler que malgré ça , si la valeur de « status = ON » cela veut dire que le hôte est sans doute allumé au moment de la requête SNMP vers la table de la cache ARP du commutateur.

DNS Name : • « UNKNOWN »: veut dire que le script n'a pas pu trouver le nom DNS• « «REACHED » : dans le cas où aucun serveur DNS n'est trouvé dans la configuration du

système

in DHCP : • « YES » signifie que l'adresse MAC existe dans le fichier « DHCP_File », et d'une valeur • « NO » pour dire que l'adresse MAC n'a pas été trouvée dans ce fichier.

DNS_REVERSE : • « NOERROR » qui garde le même résultat que celui de la commande « host » dans le champs

« Status » qui signifie que l'entée DNS inversée existe. • « FAILED » est affichée au cas où l'entrée n'existe pas sur le serveur DNS du réseau auquel la

machine appartient.

Notes : Cette colonne est pour les remarques.

• « NOCOH »: le nom DNS affiché est tiré du fichier « DHCP_File », et donc on ne peut pas savoir si ce nom est juste ou pas.

• « NOCOH** (NO IP FOUND) »: Aucune information trouvée car cette adresse n'est pas la cache ARP et ce hôte n'est pas dans le fichier DHCP

• « NOCOH FOUND (%Nom DNS%) »: C'est dans le cas où on trouve le <Nom DNS> qui correspond à une adresse MAC tirée de fichier « DHCP_File » qui ne correspond pas à celui trouvé avec la commande « host » <%Nom DNS%>

• « OK(%Nom DNS%) »: Les nom DNS trouvés dans le fichier « DHCP_File » et le résultat de la commande « host » sont identiques.

• « Double DNS/IP Entry »: s'affiche dans le cas où la même adresse MAC possède différents nom DNS (ou adresses IP).

(*) correspond aux hôtes qui ne sont pas présents dans le fichier DHCP (**) correspond aux hôtes qui ne sont dans le fichier DHCP et que l'on a aucune information sur eux de type adresse IP ou nom DNS

Université d'Évry- Informatique M1 ASR 7

Page 8: SNMP in Action 1

Question:Dans quel cas de figure pourrait-on avoir une machine dont l'adresse IP est mentionnée dans le fichier et pas son adresse mac ?Réponse:Supposant le cas suivant:

• Le cas où une machine donnée du réseau utilise DHCP pour récupérer une adresse IP, choisit d'utiliser une adresse IP fixe qui est protégée

• Par exemple : la machine qui a comme nom asrc130-13 correspond à 192.168.195.63 avec l'adresse MAC XX:XX:XX:XX:XX:XX. Un ordinateur portable branché au réseau et qui a une adresse MAC YY:YY:YY:YY:YY:YY, et on décide de mettre manuellement en adresse IP 192.168.195.63

C'est un cas ou l'adresse IP est mentionnée dans le fichier mais avec une adresse MAC qui ne correspond pas(pas la bonne adresse MAC)

Université d'Évry- Informatique M1 ASR 8