Vous êtes sur la page 1sur 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


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


Schéma d'exécution:

1 Table Bridge Table ARP


de l'agent SNMP 2
de l'agent SNMP
(MAC, PORT) (MAC, IP)

3 Comparaison
des adresses MAC

4 5
Liste Success Liste Fail
(MAC, IP, PORT) (MAC, PORT)

6
7

Fichier DHCP Comparaison


(MAC, IP/DNS) des adresses MAC

8 9

Liste Success Liste New Fail


(MAC, IP, PORT) (MAC, PORT)
Update

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


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


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.255
2. 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


« 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


• 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


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

Vous aimerez peut-être aussi