Vous êtes sur la page 1sur 82

HERBIET Guillaume-Jean, INCATASCIATO Benoit

PROJET DE CONCEPTION Rapport *******

Dcouverte de topologie et surveillance rseau par protocole SNMP

Responsable de projet : Patrick Mercier

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Introduction
Dans le cadre de notre cursus dlves de deuxime anne lEcole Suprieure dElectricit, un module est consacr la ralisation dun projet de conception. Le projet se droule sur une squence, soit environ deux mois durant lesquels 8 sances de 4h chacune sont ddis sa ralisation. Nous avons choisi de continuer un projet commenc en dbut danne lors du projet de dveloppement logiciel, ce projet permettant de reprsenter graphiquement et automatiquement la topologie dun rseau informatique via le protocole SNMP. Nous commencerons donc par introduire le protocole SNMP lui-mme avant de prsenter la partie ralisation. Nous avons spar cette ralisation en deux tches parallles : la premire consistait en la recherche du matriel prsent sur le rseau tudi grce au protocole SNMP, et la seconde soccupait de dvelopper linterface graphique qui allait permettre de visualiser le travail ralis par le premier groupe. Mais avant toute chose, nous souhaitons remercier les personnes suivantes pour avoir raliser la premire version de ce projet : DECOBECQ Vincent INCATASCIATO Benoit LEGRAND Thomas POL Sabine RICHARD Charles-Andr

HERBIET Guillaume-Jean, INCATASCIATO Benoit

2/82

Introduction

Table des matires INTRODUCTION ............................................................................................. 2 I.


A. B. C. D. 1. a) b) c) 2.

LES ENJEUX DU PROJET ...................................................................... 6


La connaissance du rseau ........................................................................................................... 6 La surveillance du rseau ............................................................................................................. 6 Les rponses apportes par notre projet ..................................................................................... 7 Les outils utiliss............................................................................................................................ 7 Le SNMP.................................................................................................................................... 7 Trame SNMP......................................................................................................................... 9 Premier format pour les PDU .............................................................................................. 10
U

Second format pour les PDU ............................................................................................... 10 Larchitecture L.A.M.P. ........................................................................................................... 10

II.
A. B.

CONCEPTION ET METHODES DE DEVELOPPEMENT ...................... 12


Architecture de lapplication...................................................................................................... 12 Organisation du dveloppement ................................................................................................ 13

III.
A. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. B. C. D. 1. 2. 3.

MOTEUR DE DECOUVERTE............................................................. 15
Dcouverte de la topologie du rseau......................................................................................... 15 Dtection initiale des quipements rseaux.............................................................................. 15 Dtection des terminaux ........................................................................................................... 16 Dtection des liaisons entre switchs ......................................................................................... 17 Dtection des switchs non grables .......................................................................................... 18 Dtection des routeurs .............................................................................................................. 19 Auto-apprentissage du type des quipements........................................................................... 20 Cas des clusters ........................................................................................................................ 20 Cas des VLAN.......................................................................................................................... 21 Recherche en profondeur (Mode poursuite) ............................................................................. 22 Modularit du script ................................................................................................................. 23 Processus de dcouverte ........................................................................................................... 24 Suivie des modifications sur le rseau ....................................................................................... 25 Stockage des topologies............................................................................................................... 25 Implmentation ........................................................................................................................... 28 Dbogage.................................................................................................................................. 28 Gestion des erreurs ................................................................................................................... 29 Dpendance et organisation des diffrentes librairies .............................................................. 29 3/82

PROJET DE CONCEPTION

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP 4. a) b) c) d) e) f) g) h) i) j) k) l) m) 5. a) b) c) d) 6. a) b) c) d) e) f) g) h) i) j) k) E. 1. 2. 3. 4. 5. 6. 7. Librairie SNMP ........................................................................................................................ 31 Emploi des MIB et des OID ................................................................................................ 31 Arguments des fonctions SNMP.......................................................................................... 31 Fonction GetCorrespondancePortMacBySNMP ................................................................. 32 Fonction GetMembersOfClusterBySNMP .......................................................................... 34 Fonction GetSwitchMacAdrBySNMP................................................................................. 35 Fonction GetInterfaceMacAdrBySNMP ............................................................................. 35 Fonction GetTypeServicesBySNMP ................................................................................... 35 Fonction GetObjectIDBySNMP .......................................................................................... 36 Fonction GetArpTableBySNMP.......................................................................................... 36 Fonction GetIfSpeedBySNMP ............................................................................................ 37 Fonction GetNextRouterBySNMP ...................................................................................... 37 Fonction IPScanBySNMP ................................................................................................... 37 Fonction GetVlanTableBySNMP ........................................................................................ 38 Librairie Rseau ....................................................................................................................... 39 Fonction MacFormat ........................................................................................................... 39 Fonction ComparaisonIPs.................................................................................................... 39 Fonction GetLocalArpTable ................................................................................................ 40 Fonction GetNumericOID ................................................................................................... 40 Librairie Topologie................................................................................................................... 41 Fonction GetSwitchLinks .................................................................................................... 41 Fonction GetNoManageableDevices ................................................................................... 43 Fonction ComparaisonSwitchsAvecListeSwitchs ............................................................... 43 Fonction ComparaisonRouteursAvecListeSwitchs.............................................................. 43 Fonction FusionCorrespondancesVlans............................................................................... 43 Fonction CreationTableauLiaisons ...................................................................................... 43 Fonction CreationTableauEquipements............................................................................... 44 Fonction RechercheDNS ..................................................................................................... 44 Fonction ExportationVersMysql.......................................................................................... 44 Fonction ModificationEtatReseau ....................................................................................... 44 Fonction DecouverteReseau ................................................................................................ 47

Limitations ................................................................................................................................... 51 Dtection des routeurs .............................................................................................................. 51 Dtection des liaisons inter-switchs ......................................................................................... 51 Dtection des nuds non grables............................................................................................ 51 Utilisation de MIB propritaires............................................................................................... 52 Surveillance de ltat du rseau ................................................................................................ 52 Bornes Wifi .............................................................................................................................. 52 Fonctionnalits supplmentaires............................................................................................... 53

HERBIET Guillaume-Jean, INCATASCIATO Benoit

4/82

Introduction

IV.
A. 1. 2. a) b) c) d) 3. a) B. C. 1. 2.

INTERFACE UTILISATEUR ET REPRESENTATION GRAPHIQUE. 54


Prsentation de linterface utilisateur ....................................................................................... 54 Description de linterface ......................................................................................................... 54 Structure des menus.................................................................................................................. 55 Gestion des utilisateurs ........................................................................................................ 55 Gestion des rseaux ............................................................................................................. 55 Gestion des quipements ..................................................................................................... 56 Affichage de la topologie et monitoring rseau ................................................................... 56 Structures des fichiers............................................................................................................... 57 Description du fichier racine................................................................................................ 57

Gestion des formulaires .............................................................................................................. 58 Affichage de la topologie du rseau ........................................................................................... 60 Fonction daffichage de la topographie .................................................................................... 60 Positionnement des images....................................................................................................... 62

CONCLUSION............................................................................................... 63 ANNEXES...................................................................................................... 64
Prambule.............................................................................................................................................. 64 Annexe 1 : Librairie SNMP et fonctions ............................................................................................. 64 Annexe 2 : Librairie Rseau et fonctions ............................................................................................ 68 Annexe 3 : Librairie Topologie et fonctions........................................................................................ 69 Annexe 4 : OID et MIB utilises .......................................................................................................... 80 Annexe 5 : Rcupration des correspondances MAC/Ports.............................................................. 81

PROJET DE CONCEPTION

5/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

I. Les enjeux du projet


Dans la plupart des centres universitaires, dducation et de recherche, comme dans toute entreprise ayant atteint une certaine taille, lutilisation de rseaux dordinateurs est aujourdhui devenue incontournable, tant ces derniers ont su simposer comme un outil indispensable, facilitant lchange dinformations, entre personnes du mme site ou vers lextrieur, et augmentant la productivit.

A. La connaissance du rseau
Dans ce contexte, les rseaux utiliss ont le plus souvent connu une expansion rapide, dicte par le besoin toujours croissant de nombre de postes utiliser, de services et rendre et de capacit soutenir un trafic de donnes toujours plus lev. Par consquent, dune part un rseau toujours une architecture qui nest pas cent pour cent logique, ou qui en tout cas ne rpond qu une certaine logique (celle de son concepteur le plus souvent) et dautre part son volution est rapide, pour ne pas dire constante et instance. Et le paradoxe le plus important rside dans le fait que plus un rseau est important, donc plus il est difficile et long den connaitre lorganisation, plus celui-ci est soumis de nombreuses et rapides variations (ajout ou changement de matriel, extension du rseau, offre de nouveaux services). Pour ajouter la complexit du problme, il faut encore prciser que la connaissance fine de larchitecture de son rseau est imprative, et mme essentielle lorsque celui-ci est de taille consquente. Pourtant, il est souvent courant, surtout aprs une phase o lon a du faire face une extension rapide du rseau, de ne plus avoir quune ide top peu prcise de son organisation et de son implantation physique. Qui ne sest jamais retrouv perdu devant une baie de brassage o les correspondances taient primes ou approximatives, sans savoir qui tait reli quoi et comment ?

B. La surveillance du rseau
Un autre problme est de pouvoir chaque instant garantir une qualit de service optimale sur son rseau : cest--dire de garantir le fonctionnement de tous les services offerts par le rseau et de toutes les machines qui le composent. Mais, soyons ralistes, aucun quipement ntant parfait, les pannes et les interruptions de services arrivent (les administrateurs rseaux les plus pessimistes vont mme jusqu dire quelles sont monnaie courante). L encore, sil est facile de diagnostiquer la panne sur un rseau compos de peu dquipement et offrant peu de services, la tche devient beaucoup plus difficile lorsquil sagit de surveiller un rseau dune taille beaucoup plus consquente o la dfaillance dun quipement peut engendrer des perturbations beaucoup plus complexes interprter que la simple coupure rseau (la logique du tout ou rien ne sapplique plus). Dailleurs, et ceci est notamment le cas dans les rseaux o les quipements sont redondants, une panne matrielle peut ne pas entrainer de consquence visible pour lutilisateur. Pour autant, il est important de dtecter cette panne et dy remdier au plus vite, ne serait-ce que pour maintenir la fiabilit et la continuit des services du rseau.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

6/82

Les enjeux du projet

Aussi, les administrateurs rseau cherchent, par divers moyen, de surveiller (ou de monitorer , pour faire un anglicisme) leur rseau ; c'est--dire deffectuer, si possible en temps rel, un diagnostic le plus complet possible de ltat de sant de leurs quipements afin de savoir rapidement o et comment agir pour pallier dventuels dysfonctionnements.

C. Les rponses apportes par notre projet


Cest afin de rpondre ces deux problmes cruciaux de dcouverte de topologie et daudit de ltat dun rseau que nous avons dvelopp notre projet. En effet, si plusieurs outils existent, comme par exemple NeDi (Network Discovery) ou Cacti, ils ne permettent pas de faire simultanment de la dcouverte de topologie et de la surveillance au sein dune mme application, ce que nous nous proposons de faire. En essayant de nous appuyer sur une conception innovante, nous allons tenter de rpondre ce double-problme au travers dune application qui se voudra conviviale et facile dutilisation. Lobjectif est donc dune part de raliser un moteur de dcouverte : c'est--dire implmenter une srie de fonctions permettant de dcouvrir le rseau (c'est--dire den tablir une topologie : nuds et liens entre ces nuds), et dautre part de prsenter et dexploiter au mieux ces rsultats : c'est--dire raliser une interface graphique pratique et conviviale dans laquelle seront regroupes et mises en forme les informations issues du moteur de dcouverte. Notamment, il sagira de reprsenter de manire graphique la topologie du rseau afin de permettre lutilisateur didentifier de manire immdiate. De plus, la notion de monitoring du rseau sous-entend le fait que lon puisse comparer ltat courant du rseau avec un tat prcdent afin de pouvoir mettre en exergue les diffrences entre ces eux instantans de ltat du rseau : ce que nous nommerons par la suite vnement et qui sont les modifications dans la structure ou ltat des nuds et de liaisons dans le rseaux et qui devront interpeller ladministrateur soucieux du bon fonctionnement de son rseau.

D. Les outils utiliss


Afin de rpondre au cahier des charges que nous venons de dcrire succinctement, nous avons besoin de divers outils que nous rangerons en deux catgories. Certains outils nous servirons dcouvrir la topologie du rseau, en dialoguant dune faon ou dune autre avec les quipements du rseau afin de rcuprer un maximum dinformation sur leur tat, leurs proprits, leurs relations avec les autres quipements du rseau. Les autres outils serviront automatiser linterrogation des quipements, stocker les rsultats de ces interrogations, les exploiter puis enfin les prsenter lutilisateur.

1. Le SNMP
Pour diverses raisons, il peut tre ncessaire de connatre la topologie dun rseau informatique (optimisation de la rpartition des taches afin dutiliser au mieux la bande passante, administration, etc ). Pour ce faire, plusieurs outils sont la disposition des informaticiens. Parmi eux, le protocol SNMP (Simple Network Management Protocol) est lun des plus rpandus et utiliss. Le systme de gestion de rseau est bas sur deux lments principaux: un superviseur et des agents. Le superviseur est la console qui permet l'administrateur rseau d'excuter des
PROJET DE CONCEPTION 7/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

requtes de management. Les agents sont des entits qui se trouvent au niveau de chaque interface connectant l'quipement manag au rseau et permettant de rcuprer des informations sur diffrents objets. Switchs, hubs, routeurs, et serveurs sont des exemples d'quipements contenant des objets manageables. Ces objets manageables peuvent tre des informations matrielles, des paramtres de configuration, des statistiques de performance et autres objets qui sont directement lis au comportement en cours de l'quipement en question. Ces objets sont classs dans une sorte de base de donne appele MIB ("Management Information Base"). SNMP permet le dialogue entre le superviseur et les agents afin de recueillir les objets souhaits dans la MIB. L'architecture de gestion du rseau propose par le protocole SNMP est donc base sur trois principaux lments :

Les quipements manags (managed devices) sont des lments du rseau (ponts, hubs, routeurs ou serveurs), contenant des "objets de gestion" (managed objects) pouvant tre des informations sur le matriel, des lments de configuration ou des informations statistiques ; Les agents, c'est--dire une application de gestion de rseau rsidant dans un priphrique et charg de transmettre les donnes locales de gestion du priphrique au format SNMP ; Les systmes de management de rseau (network management systems nots NMS), c'est--dire une console au travers de laquelle les administrateurs peuvent raliser des tches d'administration.

Pour se retrouver dans la foule dinformations proposes par chaque agent, on a dfini une structure particulire pour les informations appele SMI. Chacune des informations de la MIB peut tre retrouve soit partir de son nom de variable, soit partir dun arbre de classification. Cela revient parcourir des sous-dossiers et dossiers dun disque dur Supposons que vous souhaitiez consulter la variable System dun hte, vous pouvez soit lui demander la variable System directement, soit lui demander la variable ayant pour OID (Object IDentification) 1.3.6.1.2.1.1 correspondant larborescence de la variable (ISO, Identified Organization, dod, Internet, Management, MIB2, System). Ca parait trs lourd premire vue, mais le nombre de variable tant important, on ne peut se souvenir de chaque nom. Par contre, il existe de nombreux logiciel permettant dexplorer la MIB de faon conviviale, en utilisant cette classification

HERBIET Guillaume-Jean, INCATASCIATO Benoit

8/82

Les enjeux du projet

Figure 1 : Structure de la MIB

Au bout dun moment, les variables choisies pour la MIB (puis la MIB2) se sont avres insuffisantes pour plusieurs applications. On va donc trouver deux autres types de MIB que sont les Private MIB et les MIB R-MON (Remote network MONitoring). Les Private MIB, reprsentes en 1.3.6.1.4 dans la classification SMI, permettent aux entreprises de rajouter des variables pour une implmentation particulire des agents SNMP. Cela leur permet dajouter de nouvelles variables en fonctions des applications quelles veulent dvelopper. Les MIB R-MON permettent par exemple de placer des agents SNMP sur des supports physiques. Sur un cbles, on peut connecter une sonde R-MON qui va enregistrer tout se passe et que le ladministrateur pourra interroger pour avoir des informations sur les collisions, les dbits un endroit prcis. Deux situations sont possibles pour les changes de donnes. Soit ladministrateur rseau demande une information un agent et obtient une rponse, soit lagent envoie de luimme une alarme (trap) ladministrateur lorsquun vnement particulier arrive sur le rseau. Il est donc possible que lagent prvienne ladministrateur de son propre chef si un incident survient.

a) Trame SNMP
Le format de la trame SNMP est dcrit ci-dessous :

Figure 2 : Format de la trame SNMP

Version : numro de version SNMP. Le manager et l'agent doivent utiliser le mme numro. Communaut : ce champ sert identifier auprs du manager l'agent avant de lui accorder un accs. PDU : il y a 5 types de PDU : GetRequest, GetNextRequest, GetResponse, SetRequest, et TRAP.
PROJET DE CONCEPTION 9/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Une description de ces PDU est donne ensuite.

b) Premier format pour les PDU


Un premier format est utilis pour les PDU du genre GET, ou SET :

Figure 3 : Premier format de TRAP PDU

Type de PDU : 0 : GetRequest 1 : GetNextRequest 2 : GetResponse 3 : SetRequest ID de requte : champ qui coordonne la requte du manager et la rponse de l'agent. Statut d'erreur : entier qui indique une opration normale (cas 0) ou bien une erreur (cas 1) Index d'erreur : identifie les entres avec la liste des variables qui ont caus l'erreur. Obj/Val : association du nom de la variable transmettre avec sa valeur.

c) Second format pour les PDU


Un second format est utilis pour la TRAP PDU :

Figure 4 : Second format de TRAP PDU

Type de PDU : dans ce cas toujours gal 4. Entreprise : identifie l'entreprise de management qui a dfini la Trap. Adresse Agent : adresse IP de l'agent. Type Gnrique : dcrit quel type de problme est survenu. (7 valeurs sont possibles). Type Spcifique : est utilis afin d'identifier une TRAP spcifique une entreprise. Timestamp : contient la valeur de l'objet sysUptime reprsentant le temps coul depuis la dernire initialisation. Obj/Val : association du nom de la variable transmettre avec sa valeur.

2. Larchitecture L.A.M.P.
Pour raliser notre application, nous avions bien entendu le choix entre plusieurs architectures et plusieurs langages pour la raliser. Lors du prcdent projet auquel notre ralisation fait suite, le moteur de dcouverte avait t ralis en PHP (Personal Hypertext Prepocessor). Comme ce langage tait connu de nous deux, nous avons choisi de le conserver. En outre, il possdait la particularit de rpondre plusieurs exigences que nous avions fixes notre application. Comme la plupart des logiciels ralisant des fonctions similaires et que nous avons cits prcdemment, nous souhaitions que notre application soit disponible depuis nimporte quel poste du rseau et sans avoir dinstallation faire sur le poste de consultation.
HERBIET Guillaume-Jean, INCATASCIATO Benoit

10/82

Les enjeux du projet

Aussi, nous avons adopt le modle dit du client lger (aujourdhui adopt par de nombreux progiciels dentreprise accessibles via lintranet dvelopp au sein des socits) qui limite au maximum lutilisation de ressources sur le poste client ce qui ouvre la possibilit de dutiliser notre service sur des appareils mobiles, comme un PDA par exemple, ce qui peut savrer pratique quand il est ncessaire dintervenir sur site tout en contrlant en temps quasi-rel limpact sur le rseau des modifications que lon effectue. De plus, les nombreuses bibliothques de fonctions dveloppes par PHP incluent des fonctions de dialogue en SNMP et de nombreux outils graphiques (inclus dans la librairie GD2 de PHP) ce qui va nous permettre de faciliter notre dveloppement qui reposera grandement sur lutilisation de ces fonctions. Et puis, nous avons tout lheure voqu la ncessit de recourir lutilisation dun systme de bases de donnes performant afin de grer le stockage des informations concernant les tats successifs du rseau. Cet impratif vient renforcer le choix dune architecture trois tiers , o dans notre cas lexcution des requtes et le stockage seffectue sur la mme machine mais auraient trs bien pu se faire sur des quipements diffrents. Dun point de vue technique, notre choix sest arrt sur MySQL, systme de gestion de bases de donnes libre et mondialement connu pour ses performances et sa robustesse. Notre application sera donc excute sur un serveur, pour lequel nous avons fait le choix dune solution libre : Linux Fedora pour le systme dexploitation et Apache pour le serveur web. Cette solution, libre, stable et prouve, vient se marier parfaitement avec lutilisation du couple PHP/MySQL.

PROJET DE CONCEPTION

11/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

II. Conception et mthodes de dveloppement


Maintenant que le choix des technologies et de larchitecture gnrale de lapplication a t arrt, il reste dfinir larchitecture interne de lapplication, savoir la manire dont vont dialoguer entre eux les diffrents lments que nous avons dj esquisss, savoir : le moteur de recherche, linterface utilisateur incluant la reprsentation graphique des donnes et la base de donnes servant au stockage des applications.

A. Architecture de lapplication
Afin doptimiser le dveloppement de notre application, vaste sujet couvrir dans un temps imparti relativement restreint, nous avons choisi de parallliser les tches et de dvelopper de manire relativement indpendante chacune de nos parties. En fait, cette mise en parallle correspondait aussi avec notre profil et notre exprience passe : lun dentre nous avait dj dvelopp le moteur de dcouverte au cours dun projet prcdent, connaissait bien le fonctionnement de ce dernier et du SNMP et navait que des optimisations apporter son fonctionnement, lautre avait dj dvelopp plusieurs sites web dynamiques et pouvait donc mettre profit cette exprience pour dvelopper dans les temps impartis linterface la plus complte possible. Nous avons donc choisi dorganiser notre application de la sorte, en sappuyant sur les deux couches qui semblaient apparaitre naturellement : le moteur et linterface utilisateur. Pour interfacer ces deux lments, nous avons choisi dutiliser la base de donnes. Le moteur, une fois la dcouverte du rseau effectue, stockera dans une base de donnes les informations issues de cette dcouverte. Par la suite, linterface utilisateur utilisera ces donnes pour les traiter et les afficher. Elle permettra aussi de lancer la dcouverte topologique avec les paramtres adquats. On voit donc quil est uniquement ncessaire de bien spcifier larchitecture des bases de donnes pour que les deux briques principales de notre application sinterfacent parfaitement. De mme, il suffit de saccorder sur le nombre et la nature des paramtres de la fonction de dcouverte de topologie (fonction de plus haut niveau du moteur de dcouverte) pour pouvoir permettre nos parties de communiquer. On aboutit alors larchitecture prsente en Figure 5. INTERFACE UTILISATEUR
DecouverteReseau

fonctions/mysql.php BASE DE DONNEES ExportationVersMysql MOTEUR DE DECOUVERTE


Figure 5 : Architecture gnrale de l'application

HERBIET Guillaume-Jean, INCATASCIATO Benoit

12/82

Conception et mthodes de dveloppement

B. Organisation du dveloppement
Comme nous lavons vu prcdemment, nous avons voulu organiser de la manire la plus optimale possible le dveloppement de notre application, en paralllisant les tches. Le diagramme prsent en Figure 6 rsume succinctement les diffrentes tapes de ralisation en indiquant leur dure relative. Le moteur de dcouverte ayant dj t cod, une grande partie du temps disponible a t consacr la relecture de son code, loptimisation des fonctions lorsque cela tait possible, ainsi qu la simplification de certaines autres. Dautre part il a fallut rajouter les quelques fonctions permettant la surveillance des rseaux, et exporter le rsultat du moteur non pas vers des fichiers textes mais vers une base de donnes. Le reste du temps disponible permis de reprendre le prcdent rapport afin de le corriger, complter, et rajouter des annexes afin quil constitue une documentation solide sur ce moteur. Le but est quil ne soit pas ncessaire de se pencher sur le code source pour comprendre son fonctionnement ou utiliser une fonction des librairies, moins ce quil soit ncessaire de modifier leur code. Dans ce dernier cas, les dernires informations utiles se trouvent sous forme de commentaire dans les codes sources. Concernant la partie interface utilisateur, le dveloppement principalement consist implmenter diffrentes librairies permettant de concevoir et raliser facilement les diffrentes parties de cette interfaces : les diffrents formulaires par exemples (dont certains prsentent des fonctionnalits particulires comme le tlchargement dimages sur le serveur, la cration et la suppression de bases de donnes la vole, ) Dautre part, la principale difficult de ce dveloppement a t de reprsenter correctement et de manire agrable la topologie du rseau. La ralisation de cette fonction tant complexe, il a fallu deux tentatives successives pour y parvenir. Plus de dtails concernant cette partie sont donnes dans la suite de ce rapport.

PROJET DE CONCEPTION

13/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Figure 6 : Droulement de la ralisation


HERBIET Guillaume-Jean, INCATASCIATO Benoit

14/82

Moteur de dcouverte

III.Moteur de dcouverte
A. Dcouverte de la topologie du rseau
Un rseau informatique est caractris par un ensemble de terminaux relis entre eux par des liaisons, et ventuellement par des nuds. Les terminaux sont les ordinateurs (ou encore station de travail) des utilisateurs, les imprimantes rseaux, les serveurs (Web ou FTP par exemple), etc. Les nuds sont quant eux les commutateurs (switchs en anglais) souvent utiliss dans lpine dorsale du rseau, les concentrateurs (hubs) utiliss en bout de rseau, les routeurs, etc. Finalement, un rseau ce rsume donc un certain nombre dquipements et de liaisons entre ceux-ci, et dcouvrir sa topologie revient trouver ces deux couples dlments.

Figure 7 : Rseau (en toile)

Nous allons dtailler dans les paragraphes suivant les diffrentes mthodes retenues pour mener bien cette dcouverte.

1. Dtection initiale des quipements rseaux


En supposant quavant lexcution de lapplication, nous ne disposions daucune information sur les quipements constituant le rseau tudier, il faut alors les trouver. Pour cela, la seule mthode simple et relativement fiable et de scanner une plage dadresses IP pralablement fournie par lutilisateur. Puisqu la base, nous ne considrons que les switchs supportant le protocole SNMP (nous nutiliserons pas par exemple de ping ou traceroute), nous nallons pas scanner le parc informatique avec des ping classiques mais avec des requtes SNMP. Les quipements qui rpondront celles-ci devront alors tre tris afin dobtenir au final une premire liste dlments interroger plus en dtail. A noter que cette premire requte doit tre simple : elle ne doit rcuprer quune seule information pour ne pas surcharger le rseau. Enfin, celle-ci doit tre standard pour que tout quipement, switch ou simple serveur soit en mesure de rpondre. Scanner une plage dadresses IP a galement un autre avantage : puisque le serveur sur lequel va tourner le programme essaiera de communiquer vers toutes ces IP, il devra obtenir leurs adresses MAC et se constituera ainsi une table ARP relativement complte. Nous pourrons alors rcuprer cette table afin de traduire les adresses MAC obtenues plus tard en adresses IP, plus pratique et parlant pour identifier un quipement. En effet, noublions pas que nous allons interroger principalement des switchs qui fonctionnent par dfaut au niveau 2 du modle OSI, autrement dit qui travaillent avec des adresses MAC et non des adresses IP. Certes les adresses MAC sont (normalement) uniques - et nous en abuserons afin dviter tous
PROJET DE CONCEPTION 15/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

doublons dans nos diffrentes listes dquipements - mais un administrateur rseau identifiera bien plus rapidement une machine par son IP. Enfin il faut noter que cette dtection ne concerne pas les terminaux (puisquon se base sur le protocole SNMP et que mme si des serveurs seraient ainsi dtects, ils seraient par la suite limins).

Internet

Nuds dtecter et interroger

Figure 8 : Nuds rseaux dtects initialement

Nous allons justement nous pencher maintenant sur ces lments.

2. Dtection des terminaux


Les simples ordinateurs ou imprimantes rseaux seront eux dtects depuis chaque switch interrog : leurs adresses MAC se trouveront sur les ports des nuds rseaux. Nous allons donc rcuprer les correspondances adresses MAC / ports de chaque switch. Cette table, comme son nom lindique, associe chacun des ports des switchs une ou plusieurs adresses MAC, donc un ou plusieurs quipement (terminal ou nud). De plus, si nous disposons dune entre dans la table ARP pour ces adresses MAC donnes, nous pourrons obtenir leurs adresses IP, et ainsi de suite plus dinformation en les interrogeant par exemple par lintermdiaire dun protocole quelconque (http, ftp, smtp, etc.).

Terminaux Figure 9 : Dtection des terminaux

HERBIET Guillaume-Jean, INCATASCIATO Benoit

16/82

Moteur de dcouverte

3. Dtection des liaisons entre switchs


Maintenant que nous avons toutes les correspondances MAC/ports, les liaisons entre les terminaux et les nuds sont donc connues. Par contre, il reste lier entre eux les switchs. Or chaque interface rseau possde une adresse MAC, mme les ports des switchs, puisque ce sont en fait des cartes rseaux Nous trouverons donc ces liaisons en cherchant, sur chaque switch, les MAC des ports des autres switchs connus. Si une liaison potentielle est trouve entre le switch courant (celui actuellement trait par lapplication) et un switch distant, nous vrifierons alors la rciproque, c'est--dire que le switch distant voit bien le switch courant. Si tel est le cas, alors nous avons rellement une liaison entre ces deux quipements. Si la rciproque nest pas trouve, nous lignorerons. Il existe cependant une exception quant la vrification de la rciprocit dune liaison : il sagit du cas particulier o le switch distant est en fait un routeur. En effet, un routeur ne dispose pas forcment des mmes MIB quun switch classique et il se peut que nous narrivions pas obtenir ses correspondances MAC/Ports. Cest pourquoi dans ce cas particulier, et dans ce cas uniquement, nous nous contenterons de la prsence de ladresse MAC dun port du routeur sur un autre quipement pour considrer que la liaison existe. Afin de garantir un rsultat cohrent, cette recherche de liaison sans tester la rciprocit ne sera faite quaprs avoir cherch les liaisons classiques et en ne prenant en considration que les adresses MAC des routeurs.
Switch 1 (MAC 00:30:80:0C:8E:40)
Port 1 (MAC :8E:4A) Port 2 Port 3 Port 4

Le Switch 2 voit la MAC :8E:4A sur sont port 2

Le Switch 1 voit la MAC :A1:85 sur sont port 1

Port 1

Port 2 (MAC :A1:85)

Port 3

Port 4

La liaison est considre comme existante

Switch 2 (MAC 00:08:21:2A:A1:80)

Figure 10 : Dtection d'une liaison inter-switch

PROJET DE CONCEPTION

17/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Switch 1 (MAC 00:30:80:0C:8E:40)


Port 1 (MAC :8E:4A) Port 2 Port 3 Port 4 (MAC :8E:4A)

Le Switch 1 voit la MAC :7B:10 sur sont port 4 Le Switch 2 voit la MAC :8E:4A sur sont port 4

Les liaisons sont supposes inexistantes

Port 2

Port 3

Port 4 (MAC :A1:85)

Port 1 (MAC :7B:15)

Port 2

Port 3

Switch 2 (MAC 00:08:21:2A:A1:80)

Switch 3 (MAC 00:08:12:36:7B:10)

Figure 11 : Non dtection de liaisons inter-switchs

La vrification de la rciprocit de la liaison est importante cause dun phnomne constat : sur les interfaces reliant deux switchs entre eux se trouvent gnralement des adresses MAC de terminaux qui pourtant ny sont pas directement connects. Or pour ces quipements en question, la condition de rciprocit nest pas vrifie. Par contre, cette mme condition est vrifie lorsquil sagit de la liaison relle entre les deux switchs De plus, ds quune liaison est dtecte, la correspondance en question est supprime afin quelle ne puisse plus tre prise en compte plus tard (nous pourrions alors dtecter plusieurs liaisons diffrentes manant dans la ralit dune seule et unique liaison, pour les mmes raisons qui ont justifi le test de la rciprocit des liaisons). De plus, on prend soin de retirer ladresse MAC de lIP du switch (autrement dit son IP permettant son administration). Effectivement, dans le cas de clusters (cf. Cas des clusters page 20) nous pouvons par exemple retrouver ladresse MAC du commandeur sur diffrents membres mme si ceux-ci ny sont pas relis directement ! Ceci semble tre caus - mais nous ne pouvons laffirmer - par lexistence du cluster et que chaque membre connat (forcement) le switch matre du groupe. Etant donn que seules les liaisons physiques nous intressent nous nous contenterons donc uniquement des adresses MAC des interfaces. Dans le mme esprit, il faut galement retirer les MAC des interfaces des switchs sur les correspondances de ces mmes switchs. De fait, il arrive sur certain dentre eux quune interface connaisse sa propre adresse MAC ! Afin dviter tout rsultat erron, nous les supprimons donc.

4. Dtection des switchs non grables


Cette partie est relativement simple. En effet, si sur un port nous dtectons plusieurs adresses MAC, il y a alors forcment un quipement rseau intercal entre ce port et ces MAC ! Cet appareil pouvant tre grable ou non : il est ncessaire de traiter cette tape aprs avoir dtect les liaisons inter-switchs (donc entre lments grables !). Ainsi, toutes les liaisons entre quipements administrables seraient dj trouv, et ne resterais que les priphriques non grables ou les switchs administrables que nous naurions tous simplement pas dtect. Nanmoins, le fait dutiliser le nombre dadresses MAC prsentes sur un port donn implique deux limitations :
HERBIET Guillaume-Jean, INCATASCIATO Benoit

18/82

Moteur de dcouverte

Si un port est reli un switch non administrable auquel aucun ordinateur nest reli, il ne pourra tre dtect. En effet, mme si cet quipement possde une adresse MAC visible sur le port du switch grable, nous nen verrons quune seule et cet quipement sera alors confondu avec un terminal. Par ailleurs, nous ne pouvons quaffirmer avec certitude quau moins un priphrique est intercal entre un port du switch et les ordinateurs. Par contre, nous navons aucun moyen den connatre le nombre exact !

Maintenant, il faut bien comprendre quil nest pas possible de pallier ces dfauts en utilisant uniquement le protocole SNMP. Or utiliser dautres mthodes sortirait du cadre de ce projet !

Switch grable

Switch non grable

Figure 12 : Dtection des switchs non manageables

5. Dtection des routeurs


Les routeurs sont trs importants car tout ordinateur qui veut accder un rseau extrieur passe par lui. Les routeurs possdent ainsi une table ARP consquente et rcente, do leur intrt. Outre la difficult de les dtecter (des switchs peuvent tre de niveau 3 et donc avoir des fonctionnalits identiques aux routeurs classiques), il faut alors quils soient interrogs le plus tt possible. En effet, les correspondances MAC/ports obtenues ne donnent justement que des adresses MAC et il est prfrable davoir leurs IP associes rapidement afin de pouvoir les exploiter tout au long de nos scripts. Cest pourquoi ds quun routeur est dtect, la liste des switchs est remise jour en incluant ce routeur sil ne ltait pas dj et surtout en changeant lordre de cette liste. Nous pouvons considrer cette liste comme une file, le premier lment tant le plus prioritaire puisque cest lui qui sera trait en premier et ainsi de suite. Chaque nouveau routeur dtect (ou switch dj connus mais dont on ne connaissait pas cette fonctionnalit) sera ainsi plac dans cette file de faon a tre le prochain quipement qui sera interrog, relguant les autres switchs en fin de liste. Un problme peut par ailleurs survenir lorsque nous dtectons de nouveaux routeurs : nous pourrions tomber sur les routeurs du fournisseur daccs et notre programme essaierait tout naturellement de rcuprer la table ARP par SNMP. Ceci nest bien entendu pas envisageable. Cest pourquoi une liste de plages dadresses IP autorises est mise en place. Cette liste inclura automatiquement les plages dIP scanner puisque si nous voulons les scanner, cest que nous autorisons justement lenvoi de requtes SNMP vers ces IP ! Nous avons choisis dimplmenter une liste dIP autorises et non interdite pour plusieurs raisons. Dune part, nous ne connaissons pas systmatiquement la plage dIP de votre fournisseur daccs ou mme dautres rseaux auxquels nous ne devrions pas accder. Par contre, nous supposons connaitre au moins les IP composant le rseau que nous voulons dcouvrir, ce qui
PROJET DE CONCEPTION 19/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

est dautant plus vrai dans le cas o vous lancez un scan sur celles-ci ! Dautre part, et dans cette mme logique, nous serions amens interdire toute plage dadresses IP autres que celle que nous autoriserions. Il est donc plus simple, logique et concis de dfinir une plage autorise plutt quune plage interdite !

6. Auto-apprentissage du type des quipements


Afin de fonctionner correctement, notre moteur de dcouverte se contente de trouver les quipements quil va pouvoir interroger. Nanmoins, nous aurons besoin de connatre plus prcisment les types des quipements rencontrs lorsque nous voudrons les afficher. Nous pouvons obtenir deux informations par SNMP : un identifiant unique (ObjectID) par produit (il ne sagit pas dun numro de srie identifiant de manire unique un matriel, mais dun numro identifiant la marque du matriel, etc.), et dautre part un numro (sysServices) calcul partir des couches du modle OSI sur lesquelles notre matriel travaille. Nous pouvons disposer par ailleurs dun fichier dcrivant les ObjectID. Malheureusement, cette liste nest pas formate rigoureusement, et il est difficile dobtenir automatiquement le type correspondant. De plus, cette liste tant longue, il ntait pas envisageable de la traiter manuellement en une seule tape. Enfin, le sysServices ne savre pas toujours exact pour identifier le type de matriel rencontr. Nous avons donc dcid de laisser lutilisateur mettre jour lui-mme les informations selon le procd suivant : Lorsquun quipement grable est dtect, nous cherchons son ObjectID. Si nous par ailleurs nous avons dj associ cet identifiant un type dquipement, alors nous connaissons son type et nous le prenons directement en compte. Si lObjectID obtenu nest pas encore associ un type, ou alors que nous ne le connaissions pas, nous rcuprons galement le sysServices et le moteur de dcouverte poursuit son travail sans renseigner le champ type de ce matriel. Une fois la dcouverte termine, lensemble des quipements dont nous possdons un ObjectID mais o le champ type nest pas complt sont prsents lutilisateur. Nous affichons les informations disponibles sur ce matriel, et nous lui signalons que celui-ci est certainement de tel type grce au sysServices. Lutilisateur peut alors confirmer ce choix, ou renseigner un autre type. Une fois fait, les prochaines fois que nous rencontrerons ce matriel, nous saurons alors directement quil rentre dans tel catgorie.

7. Cas des clusters


Les switchs appartenant un rseau sont par dfaut indpendants et autonomes. Cependant, pour pouvoir tre administrs distance, ils possdent chacun une adresse IP, ce qui peut devenir problmatique pour les rseaux sarticulant autour dune seule classe dIP (typiquement une classe C, permettant de connecter 254 machines). Une solution consisterait alors utiliser une classe locale pour les IP des switchs. Les switchs grables haut de gamme permettent galement davoir une seule adresse IP pour grer un ensemble de switchs. Nous parlons alors de cluster, le switch possdant sa propre IP est le commandeur (commander), les autres switchs tant des membres (members). Afin de palier la dfaillance du commandeur, des membres du cluster peuvent galement tre commandeurs potentiels et prendre ainsi le relais si le premier ne pouvait plus assurer ses fonctions. Il faut enfin noter que mme sils appartiennent un cluster, tous les switchs peuvent garder leurs IP : il faudra donc chaque fois quun membre est dtect, vrifier que nous ne lavons pas dj incorpor notre liste de switchs parce quil aurait dj t scann par exemple !

HERBIET Guillaume-Jean, INCATASCIATO Benoit

20/82

Moteur de dcouverte

La figure suivant est une illustration dun cluster constitu de 4 switchs, dont un est le commandeur (et possde donc une adresse IP), un autre est commandeur potentiel (possde lui aussi une IP) et les deux derniers tant des membres.
Membre 3
(Com. potentiel) 193.48.225.251

Commandeur
193.48.225.250

Membre 1

Membre 2

Figure 13 : Exemple d'un cluster

8. Cas des VLAN


Un VLAN (ou Virtual LAN) est un rseau physique virtuel. Ainsi, plusieurs rseaux virtuels peuvent tre dfinis sur un mme switch, rendant ainsi ladministration des rseaux indpendante de la gographie et accroissant la scurit globale (les professeurs et les lves dune cole ne sont plus sur le mme rseau par exemple). Il sera ncessaire de les dtecter car sur certains switchs, les correspondances MAC/Ports doivent tre demandes pour chaque VLAN. Si nous ne les rcuprons pas toutes, il se peut quun switch appartenant totalement un autre VLAN et dtect par un scan dIP se retrouve isol de toute autre quipement. La figure suivante illustre un VLAN simple entre plusieurs terminaux. 8 Ordinateurs se partagent deux VLAN. Les Ordinateurs dans le mme VLAN peuvent communiquer entre eux, mais deux ordinateurs dans deux VLAN diffrents ne le peuvent ! Notons malgr tout que tous les ordinateurs sont relis aux mmes switchs, et que la liaison entre les deux switchs nest pas attribue un VLAN en particulier.
VLAN 2

VLAN 1 & 2

VLAN 1

Figure 14 : Exemple de VLAN

PROJET DE CONCEPTION

21/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

9. Recherche en profondeur (Mode poursuite)


La recherche en profondeur, encore appel mode poursuite, permet de dtecter des switchs interroger de manire rcursive. Par dfaut, tous les nuds rseaux sont dtects en premier, puis dans un second temps, nous les interrogeons et nous rcuprons leurs correspondances MAC/Ports. Ceci impose donc de connatre tous les switchs ds les premires tapes afin davoir une topologie complte. Or nous obtenons des adresses MAC. Si nous connaissons galement leurs adresses IP, et que ces adresses nont pas encore taient scannes ou indiques par lutilisateur, nous pouvons les scanner et ventuellement tomber sur des switchs que nous aurions sinon oublis. Une fois ces quipements dtects, ils sont ajouts la liste des switchs dj connus et seront traits plus tard, et ainsi de suite Nous pourrions ainsi imaginer, dun point de vue thorique, nindiquer initialement ladresse dun seul switch et le moteur de recherche trouverait alors tout seul lensemble des quipements rseaux et tracerait sa topologie. Il faut nanmoins relativiser ce cas thorique puisque moins que le switch initial soit un routeur, nous naurons pas de table ARP consquente et ainsi beaucoup de nuds rseaux risqueraient dtre ignors. Cette fonctionnalit est illustre sur la figure suivante :
Profondeur 2 Subnet 1 Internet

S4

S1 S3 S2

Profondeur 0 Subnet 1

Profondeur 1 Subnet 2

Figure 15 : Recherche en profondeur d'quipement grable

Le routeur spare le rseau Internet et deux sous rseaux, lun constitu des switchs S1 et S2, lautre des switchs S3 et S4. Dans un premier temps, seul les switchs S1 et S2, ainsi que le routeur ont t dcouvert. Lorsque nous allons interroger le routeur, nous allons trouver ladresse MAC du switch S3 sur lun de ses ports. Si nous avons la correspondance ARP adquate, nous obtiendrons alors ladresse IP du switch S3 et nous pourrons son tour linterroger. Nous rptons cette procdure afin de dcouvrir le switch S4, qui se trouve au
HERBIET Guillaume-Jean, INCATASCIATO Benoit

22/82

Moteur de dcouverte

deuxime niveau de profondeur, en prenant comme rfrence (profondeur 0) le rseau que nous avons dcouvert initialement.

10.

Modularit du script

Nous avons jusqu maintenant dtaill les diffrentes tapes ncessaires pour dcouvrir la topologie dun rseau. Ces tapes sont autant de fonctions appeles par le moteur de recherche lui-mme. Ainsi, un module sera charg de scanner les plages dIP, un autre de dtecter les liaisons inter-switchs, etc. Il doit tre galement possible dutiliser ou non tel ou tel module suivant les donnes fournies initialement et les limitations imposes par ladministrateur rseau. Ainsi nous tablissons plusieurs options de fonctionnement : Utilisation ou non dune liste de switchs dj fournie, Scanner ou non des plages dadresses IP, Prise en compte ou non des plages dIP autorises, Rcuprer ou non la table ARP locale du serveur sur lequel tourne lapplication, Rechercher ou non les membres de cluster nayant pas dIP, Activer ou non le mode poursuite (et si oui quel niveau de profondeur sarrter), Chercher des informations complmentaires sur les ordinateurs trouves.

La combinaison des options Utilisation ou non dune liste de switchs dj fournie et Scanner ou non des plages dadresses IP permet de ne pas scanner le rseau mais ncessite alors de connatre les switchs. Ce cas doit tre considr avec intrt puisque dans lhypothse o les nuds du rseau restent inchangs mais o les liaisons sont modifies, nous pourrions alors redessiner la topologie du rseau sans le charger inutilement avec des requtes superflues ! Par contre, la premire fois que le script est utilis, il est prfrable et surtout plus commode dactiver le scan afin de ne pas avoir remplir la liste des switchs la main. La rcupration de la table ARP locale est optionnelle car elle implique une configuration particulire du serveur sur lequel est excut le script. En effet, notre programme tourne sur un serveur web. Or pour rcuprer cette table locale, il faut excuter, depuis une page web (script PHP pour tre plus exact), une commande systme. Certain administrateur pourrait le considrer comme tant une faille de scurit. De plus, la commande utilise ne se trouvant pas forcment dans un dossier auquel a accs le script, il faut alors crer un lien symbolique sous linux, ou changer la configuration du serveur web. Enfin, pour terminer, les manipulations faire ne sont pas les mmes sous Windows ou Linux. Tout ceci pourrait amener lutilisateur ne pas vouloir utiliser cette fonction.

PROJET DE CONCEPTION

23/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

11.
1. 2. 3. 4. 5.

Processus de dcouverte

Voici une vue densemble du processus de dcouverte du rseau : Rcupration dune liste de switchs prtablie (si autorisation et existence), Scan des diffrentes plages dIP (si autorisation), Rcupration de la table ARP (si autorisation), Confrontation les listes de switchs (ancienne et nouvelle) pour liminer les doublons, Pour chaque switch connu : a. Recherche des membres dun ventuel cluster (si autorisation) et confrontation avec les switchs dj connus. Ajout si ncessaire des nouveaux switchs, b. Rcupration de la table ARP du switch, c. Recherche de nouveaux routeurs et confrontation avec ceux dj connus. Si ncessaire, ajout des nouveaux routeurs. Mise en ordre de la liste des switchs afin que les routeurs soient prioritaires. Les routeurs dadresses IP nappartenant pas aux plages autorises si toutefois elles sont dclares ne sont pas pris en compte, d. Recherche des VLAN, e. Rcupration des adresses MAC des interfaces du switch, f. Pour chaque VLAN du switch courant : i. Rcupration des correspondances adresses MAC/Ports ii. Mise jour des correspondances du switch courant pour supprimer les adresses MAC des interfaces et lIP de ce mme switch ! On supprime par la mme occasion les ports o il ny a aucune MAC pour optimiser le temps dexcution global du script, g. Mode poursuite : scan des adresses IP issues des adresses MAC obtenues. Si dtections de switchs, confrontation avec ceux dj connus et ajout des nouveaux. Vrification que le niveau maximal de profondeur explorer nest pas atteint, sinon, cette tape est ignore h. Fusion des correspondances de chaque VLAN pour avoir une seule et unique correspondance pour ce switch, Recherche des liaisons inter-switchs (avec test de rciprocit), Recherche des liaisons switchs-routeurs (sans test de rciprocit), Recherche des switchs non grables, Exportation des rsultats sous forme de deux tableaux : un pour les quipements, un pour les liaisons entre ces derniers.

6. 7. 8. 9.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

24/82

Moteur de dcouverte

B. Suivie des modifications sur le rseau


Le but de cette application est de dcouvrir la topologie dun rseau, mais galement de suivre son volution et de dresser un historique des modifications survenues. Pour cela, le moteur de dcouverte sera excut rgulirement. Suivant la taille du rseau tudi et la frquence dexcution du moteur, les donnes stocker peuvent devenir vite importante. Cest pour cela que la premire fois quune dcouverte est faite sur le rseau, lensemble des informations sont stocks, tandis que pour les prochaines dcouvertes, seules les modifications seront enregistres. Cest la seule solution optimale pour possder un historique complet et nanmoins conomiser le maximum de place possible sur les volumes de stockage. Par contre, ce choix impose des traitements supplmentaires effectuer sur les donnes obtenues. Nous distinguons quatre types de modification : Ajout dun nouvel quipement / dune nouvelle liaison, Suppression dun quipement / dune liaison, Modification de paramtres dun quipement / dune liaison, Rapparition dun quipement / dune liaison aprs sa suppression.

Il faut cependant garder lesprit que ce moteur, tel quel, ne permet pas vraiment de faire de la surveillance temps rel : le protocole SNMP na pas t prvu pour. Actuellement, seule la mthode consistant excuter rgulirement le moteur de recherche est utilise. Par contre, les options de fonctionnement du moteur peuvent varier : en effet nous pouvons imaginer le cas suivant : La dcouverte initiale se fait avec toutes les options actives, incluant les scans de plages dIP. Comme le chur du rseau ne doit pas voluer souvent, une telle dcouverte est effectue une fois par jour par exemple Par contre, une dcouverte partielle sans scan dIP, est effectue beaucoup plus rgulirement, par exemple tous les quarts dheures ou toutes les heures suivant que le but soit de surveiller des utilisateurs ou de vrifier que des modifications long terme non souhaites soient apportes au rseau.

Dans tous les cas, le moteur ne doit pas tre appel de tel manire quil tourne en continue, ponctionnant ds lors une partie de la bande passante du rseau et du temps processeur des nuds interrogs pour ses requtes.

C. Stockage des topologies


Comme nous venons de le voir, il faut stocker dune part la topologie du rseau initiale, et dautre part les modifications qui lui sont apportes. Enfin, afin de manipuler facilement ces donnes, nous avons opt pour lutilisation dune base de donnes, en loccurrence MySQL. Le moteur de dcouverte renvoyant deux tableaux PHP, lun pour les quipements et lautre pour leurs liaisons, nous les transfrons dans deux tables ListeEquipements et ListeLiens qui assurent le mme rle que les tableaux initiaux. Les modifications sont quant elles enregistres dans les tables ChangementEquipements et ChangementLiens. Deux tables supplmentaires, ListeTypes et ListeOid sont crs afin dindiquer le type des quipements pour la premire et dassocier lObjectID un type de matriel pour le seconde. Pour plus dinformation, se reporter au paragraphe Auto-apprentissage du type des quipements. La figure suivante reprsente le modle entits-associations correspondant.

PROJET DE CONCEPTION

25/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

ListeLiens Id Port1 Port2 IdVlan1 IdVlan2 NomVlans1 NomVlans2 Vitesse1 Vitesse2 MisAJour Actif 0..N

A t modifi

ChangementLiens 0..N IdModif Date TypeModif Port1 Port2 IdVlan1 IdVlan2 NomVlans1 NomVlans2 Vitesse1 Vitesse2 MisAJour Actif

0..N

A t modifi

0..N

2 Liaison 1..N ListeEquipements Id NomSnmp Ip Mac NomCommunaute SysServices Dns MisAJour Actif Position 0..N A t modifi
ChangementEquipements

0..N

0..N

A t modifi

0..N

IdModif Date TypeModif NomSnmp Ip Mac NomCommunaute SysServices Dns MisAJour Actif Position 0..1

1 Est du type

0..N ListeTypes

0..N ListeOid 0..N Est associ 0..1

Id Nom Icne Description

Id OID NomProduit

Figure 16 : Schma entits-associations employ

Ce graphe ne prend pas en compte le fait que plusieurs rseaux surveiller peuvent avoir t dfinis. En effet, lutilisateur peut crer plusieurs rseaux, chacun tant alors caractris par un identificateur $ID. Les jeux de tables dcrivant la topologie dun rseau sont ainsi toutes prfixs par cet identificateur. Par exemple la table ListeLiens est en fait la table $ID_ListeLiens.
HERBIET Guillaume-Jean, INCATASCIATO Benoit

Possde lOID

26/82

Moteur de dcouverte

La table ListeEquipements possde les attributs suivant : Id : Identificateur de lquipement (Cl primaire), NomSnmp : Nom du matriel obtenu par SNMP, Ip : Son adresse IP sil en possde une, Mac : Son adresse MAC, NomCommunaute : Le nom de communaut sil supporte le SNMP, SysServices : Cf. Fonction GetTypeServicesBySNMP page 35, Type : Type de matriel (Cl trangre, de ListeTypes), OidProduit : Cf. Fonction GetObjectIDBySNMP page 36, Dns : Nom DNS sil possde une IP et que les noms DNS ont t rsolus, MisAJour : Utile pour la Fonction ModificationEtatReseau page 44, Actif : Indique si lquipement est actuellement prsent sur le rseau ou non, Position : Permet de spcifier la position de lquipement lors de son affichage. La table ListeLiens possdes les attributs suivant : Id : Numro dindentification de la liaison IdEq1 : Id de lquipement 1 (Cl trangre, de ListeEquipements ou ChangementEquipements), IdEq2 : Id de lquipement 2 (Cl trangre, de ListeEquipements ou ChangementEquipements), Port1 : Port sur lequel se fait la liaison, ct quipement 1, Port2 : Idem ct 2, IdVlan1 : Numro du VLAN du port ct quipement 1, IdVlan2 : Idem ct 2, NomVlans1 : Nom du VLAN du port ct quipement 1, NomVlans2 : Idem ct 2, Vitesse1 : Vitesse de fonctionnement du port ct quipement 1, Vitesse2 : Idem ct 2, MisAJour : Utile pour la Fonction ModificationEtatReseau page 44, Actif : Indique si la liaison existe actuellement.

Les tables ChangementEquipements et ChangementLiens reprennent les mmes attributs ainsi que les suivants qui sont ajouts : IdModif : Cl primaire de ces tables, Date : Date laquelle la modification a t dcouverte, TypeModif : Numro identifiant le type de modification : o 0 : Suppression o 1 : Ajout, o 2 : Modification, o 3 : Rapparition. La table ListeTypes possde les attributs suivant : Id : Cl primaire de cette table, identifie un type particulier, Nom : nom donn au type en question, Icone : Icne pour affichage, Description : Description ventuelle du type.

PROJET DE CONCEPTION

27/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

La tableListeOid possde les attributs suivant : Id : Cl primaire de cette table, OID : ObjectID dun produit, IdType : Type associ cet ObjectID (cl trangre, de ListeTypes), NomProduit : Description ventuelle du produit.

D. Implmentation
Limplmentation a t faite en PHP (Hypertext Preprocessor), dune part parce que ce langage dispose par dfaut de fonctions SNMP, et dautre part parce que ce programme pourra tre ainsi facilement intgr sur un serveur web. Du fait de lutilisation de ce langage de programmation, nous parlerons dsormais plutt de script que de programme. Il nous arrivera cependant dutiliser le terme programme ou application sans que cela ne doive porter rellement confusion. Une autre raison quant lutilisation de PHP est sa grande aisance pour toute manipulation de tableau. Or nos fonctions utilisent comme arguments et fournissent comme rsultat principalement des tableaux. Il est donc agrable de pouvoir faire des fusions, intersection, soustraction et autres manipulations en appelant des fonctions optimises, rapides et fiables conues par des dveloppeurs professionnels, plutt que de devoir les recoder soit mme (ce qui aurait t le cas en utilisant le langage Java). De plus, bien que ce langage permette la programmation oriente objet, nous avons plutt utilis des librairies de fonctions et un script principal. En effet, afin davoir un code simple, clair et facilement maintenable, nous avons divis chaque partie lmentaire en autant de fonctions. Le script principal, se contente alors dappeler ces diffrentes fonctions. Nous avons par ailleurs regroup ces fonctions en plusieurs catgories. Celles-ci pourraient sapparenter des classes puisquelles regroupent des fonctions de mme nature, mais ce ne sont pas des objets en tant que tel et par exemple lhritage nest pas utilis. Cest pourquoi nous parlerons plus de librairies comme bibliothques de fonctions de mme nature. Enfin, un avantage de dvelopper des librairies (tout comme ce serait le cas avec des classes) et dune part de pouvoir les rutiliser pour dautres applications, et dautre part de pouvoir rajouter des fonctions sans devoir modifier lensemble des fichiers.

1. Dbogage
Il est important de prvoir ds le dbut des fonctions de dbogage dans le code afin de faciliter la recherche et la correction des erreurs de programmation, et galement de valider certains algorithmes ainsi que leurs optimisations. Etant donn que ce code est ralis en PHP et est donc destin tre excut partir dun serveur web, nous avons opt pour laffichage de message dans la page web au cours de lexcution des scripts et si besoin la cration de page HTML spcifiques.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

28/82

Moteur de dcouverte

Par ailleurs, chaque fonction, deux ou trois exceptions prs, disposent dun paramtre supplmentaire $niv_debug qui correspond au niveau de dbogage ou encore de verbosit, anglicisme reprsentant la quantit dinformation (sur le droulement des fonctions) affiche selon notamment leurs importances. Cet argument peut prendre trois valeurs : 0 : qui revient dsactiver le mode dbogage : aucune information non indispensable ne sera affiche. 1 : un certain nombre de messages sont affichs, montrant le droulement du script. Par exemple, les appels des diffrentes fonctions sont signals. Ce mode est utile pour suivre lexcution des scripts et non pour dboguer une fonction en particulier 2 : dans ce mode, le droulement interne de chaque fonction sera dtaill. Cest le mode le plus coteux en termes daffichage puisque de nombreux messages seront affichs et il restera la charge du dveloppeur de les trier. Ce mode est utile pour suivre le droulement dune fonction en particulier, connatre ces arguments, son rsultat, etc.

Dans chaque fonction, un test est ncessaire chaque fois quun message de dbogage peut potentiellement tre affich. Afin doptimiser la vitesse dexcution des scripts, nous pouvons supprimer ces tests une fois que lapplication sera finalise. Dans les paragraphes qui suivent sur les fonctions que nous avons dvelopp, cet argument ($niv_debug) ne sera plus indiqu.

2. Gestion des erreurs


De plus, ces fonctions ont t crites de faon ce quelle renvoie un rsultat exploitable (pouvant tre nul) afin de ne pas interrompre lexcution du script. Ainsi, mme si par exemple un switch ne rpond pas lorsquil est interrog, le script continuera de traiter les autres switchs. Au pire, ce manque dinformation entranera laffichage dune topologie incomplte voire partiellement errone, au mieux ceci naura aucune incidence sur la dcouverte de la topologie du rseau ! Il faut aussi remarquer que dans le cadre de rseau de taille consquente, par exemple celui de lcole, on ne peut garantir un rsultat totalement juste, et il nest pas anormal quun switch ne rponde pas, cest pourquoi il est important que nos fonctions tiennent compte de ces possibilits (non rponse dun quipement, etc.). Enfin, toutes les fonctions SNMP pouvant ne pas rpondre cause dun problme non li au programme lui mme mais lenvironnement logiciel ou matriel, sont codes de faon ne pas remonter lutilisateur de message derreur. Ainsi, ce dernier ne verra pas de messages incomprhensibles, et si ces fonctions naboutissent pas, elles renverront comme nous lavons vu prcdemment un rsultat nul ne bloquant pas la suite du script.

3. Dpendance et organisation des diffrentes librairies


Voici un diagramme reprsentant les librairies, les fonctions quelles contiennent et leurs dpendances (reprsent par une flche orient dans le sens de la dpendance de la mme manire que les diagrammes UML) :

PROJET DE CONCEPTION

29/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Topologie
GetSwitchLinks GetNoManageableDevices ComparaisonSwitchsAvecListeSwitchs ComparaisonRouteursAvecListeSwitchs FusionCorrespondancesVlans CreationTableauLiaisons CreationTableauEquipements RechercheDNS DecouverteReseau ExportationVersMysql ModificationEtatReseau

Mysql

Connexion

SNMP
GetCorrespondancePortMacBySNMP GetMembersOfClusterBySNMP GetSwitchMacAdrBySNMP GetInterfaceMacAdrBySNMP GetTypeServicesBySNMP GetObjectIDBySNMP GetArpTableBySNMP GetIfSpeedBySNMP GetNextRouterBySNMP IPScanBySNMP GetVlanTableBySNMP

Rseau
MacFormat ComparaisonIPs GetLocalArpTable GetNumericOID

Figure 17 : Dpendances des diffrentes librairies

HERBIET Guillaume-Jean, INCATASCIATO Benoit

30/82

Moteur de dcouverte

4. Librairie SNMP
Cette libraire inclue lensemble des fonctions permettant de rcuprer les informations des switchs par lintermdiaire du protocole SNMP. Voici les fonctions qui y sont incluses : GetCorrespondancePortMacBySNMP : Rcupre les correspondances adresses MAC/Ports du switch, GetMembersOfClusterBySNMP : Permet de trouver les membres dun cluster de switchs. Ne sapplique quaux switchs de marque Cisco, GetSwitchMacAdrBySNMP : Donne ladresse MAC du switch, GetInterfaceMacAdrBySNMP : Donne les adresses MAC des interfaces du switch, GetTypeServicesBySNMP : Permet dindiquer le type dquipement (switch, switch de niveau 3, routeur, etc.), GetObjectIDBySNMP : Permet de rcuprer lOID de lentreprise commercialisant chaque nud dtect du rseau, GetArpTableBySNMP : Rcupre la table ARP, GetIfSpeedBySNMP : Obtient la vitesse des interfaces du switch, GetNextRouterBySNMP : Indique les routeurs que le switch connat, IPScanBySNMP : Scanne par SNMP une plage dadresses IP afin de dcouvrir des switchs potentiels, GetVlanTableBySNMP : Rcupre la table des VLAN du switch. Ne sapplique quaux switchs de marque Cisco.

a) Emploi des MIB et des OID


Avant de dtailler chacune de ces fonctions, commenons par quelques remarques dordre gnral. Tout dabord, dans la mesure du possible, seules les MIB standards ont t utilises. Nanmoins, certains rsultats ncessaires nont pu tre obtenus quavec lemploi de MIB propritaires. Quand ce fut le cas, nous navons utilis que les MIB Cisco qui ont le mrite dtre gnralement supporte par les autres constructeurs, par exemple HP. Qui est plus est, nous avons systmatiquement utilis des OID numriques et non leurs expressions alphanumriques. En effet, dsigner les objets par des noms impose davoir install les MIB sur le serveur que nous allons utiliser. Par contre, employ les termes numriques fonctionne sans que le daemon (ou service) SNMP ne connaisse les MIB mises en jeu. LAnnexe 4 : OID et MIB utilises rcapitule lensemble des OID utilises dans cette librairie.

b) Arguments des fonctions SNMP


Afin de crer une requte SNMP, il est ncessaire de connatre dune part ladresse IP ou le nom DNS du switch interroger, et dautre part leurs noms de communaut. Ces deux lments constituent les arguments systmatiques de nos fonctions. Ce dernier paramtre est par dfaut la valeur public (si on ne le prcise pas, il prendra cette valeur). Par ailleurs, et suivant les cas, dautres arguments peuvent tre ncessaire, par exemple largument optimisation, suivant quil est vrai ou faux, permet dutiliser les optimisations prvues dans lalgorithme de la fonction en question, ou non. Ces arguments spcifiques seront dtaills pour chaque fonction.

PROJET DE CONCEPTION

31/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

En Annexe 1 : Librairie SNMP et fonctions (page 64) de ce rapport se trouve un rcapitulatif des fonctions, incluant les arguments, leurs formats, ainsi que celui des rsultats de ces fonctions.

c) Fonction GetCorrespondancePortMacBySNMP
Il sagit de lune des principales fonctions de cette librairie. En effet, cest elle qui va rcuprer les correspondances MAC/Ports du switch, ou dit autrement, la liste des adresses MAC que le switch connat sur chacun de ses ports. Pour obtenir ces informations, nous utilisons quatre tables issues des MIB BRIDGEMIB (rfc1493) et ifMIB (rfc2863). Nous nutilisons ainsi que des MIB standard, qui plus est mandatory for all bridges , autrement dit obligatoire pour tout switch. Voici les OID utilises : OID numrique .1.3.6.1.2.1.17.4.3.1.1 Nom de lobjet dot1dTpFdbAddress Description de lobjet Adresses MAC apprises par le switch en fonction de lOID du numro du bridge associ au port correspondant OID correspondant aux numros des bridges associs chacun des ports Correspondance entre les OID des ports et les numros des bridges Nom du port en fonction de son OID

.1.3.6.1.2.1.17.4.3.1.2 .1.3.6.1.2.1.17.1.4.1.2 .1.3.6.1.2.1.31.1.1.1.1

dot1dTpFdbPort dot1dBasePortIfIndex ifName

Tableau 1 : OID utilises (Fonction GetCorrespondancePortMacBySNMP)

Nous rcuprons partir de ces OID quatre tableaux, respectivement $Mac_Learned, $Bridge_Port_Number, $Bridge_Port_ifIndex et enfin $Port_ifIndex_Name. Pour plus dinformation, se reporter lAnnexe 5 : Rcupration des correspondances MAC/Ports page 81. Pour obtenir les correspondances souhaites, nous utilisons lalgorithme suivant :

HERBIET Guillaume-Jean, INCATASCIATO Benoit

32/82

Moteur de dcouverte

Rcupration des tables : $Mac_Learned $Bridge_Port_Number $Bridge_Port_ifIndex $Port_ifIndex_Name

Pour chaque port de $Bridge_Port_ifIndex

Extrait de $Bridge_Port_ifIndex[port courant] : - ifIndex du port courant - OID du port courant Nom du port = $Port_ifIndex_Name[ifIndex]

Pour chaque bridges de $Bridge_Port_Number

Si (bridge courant OID du port courant) { Extrait de $Bridge_Port_Number[bridge courant] : OID du bridge courant Adresses MAC = $Mac_Learned[OID du bridge courant] }

Empilement dans le tableau rsultat de la fonction : - Nom du port - Adresses MAC

Figure 18 : Algorithme de la Fonction GetCorrespondancePortMacBySNMP

Aprs lexcution dune boucle sur le port courant et avant de passer au port suivant, nous pouvons supprimer les lments du tableau $Bridge_Port_Number dj parcourus (en mettant vrai largument Optimisation de la fonction). En effet, les informations qui sy trouvent ne concernent quun port la fois et comme la premire boucle se fait justement sur les ports du switchs, nous ne repassons jamais sur un mme port. Cette optimisation est utile ici car pour chaque port, nous bouclons sur cette table, alors que les autres tableaux sont utiliss directement en indiquant lindex qui nous intresse. A noter enfin que cette optimisation ne fait pas gagner du temps si peu dlments sont concerns (il faudra alors autant de temps pour supprimer ces lments que pour les parcourir la recherche des numros des bridges dautres ports). Cest pourquoi la suppression ne se fait que sil y a un nombre minimum (fix exprimentalement) dlments concerns ! Comme certains switchs peuvent avoir beaucoup de ports (50 par exemple), les quatre tables sont obtenus en utilisant la fonction snmpwalkoid (similaire snmpwalk) qui rcupre toutes les informations dont les OID sont issus de lOID initiale passe en paramtre. (Par exemple, appeler snmpwalk avec comme OID initiale .1.3.6.1.2.1.1 renverra les informations ayant pour OID .1.3.6.1.2.1.1.x). Cette mthode est en effet beaucoup plus rapide que dutiliser snmpget qui ne renvoie les informations correspondants qua une seule OID la fois (et donc si on obtient 50 valeurs avec snmpwalk, il faudrait appeler 50 fois snmpget pour obtenir le mme rsultat !). Cette dernire remarque est dailleurs valable pour les autres fonctions.

PROJET DE CONCEPTION

33/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

d) Fonction GetMembersOfClusterBySNMP
La fonction GetMembersOfClusterBySNMP permet de vrifier partir dun switch possdant une adresse IP (donc un switch interrogeable !) sil est membre dun cluster. Etant donn que ce type de configuration nest prsent que sur la rsidence des lves avec des switchs de marque Cisco, cette fonction na t dveloppe que pour ce cas particulier. Nous avons par ailleurs constat que celle-ci ne fonctionnait pas avec les switchs HP. Nous accdons aux membres du cluster soit par leurs adresses IP sils en possdent une (et alors lavantage du cluster nest pas de minimiser le nombre dIP ncessaire pour les grer mais que cette administration se fasse sous une unique interface commune), soit par lIP du commandeur en utilisant un nom de communaut spcial. En effet, en imaginant que le nom de la communaut du switch principal soit public, les membres auront pour communaut public@es1, public@es2, public@es3, etc. dans le cadre de switch Cisco. Il semble quutiliser des noms de communaut spcifique soit la solution adopte par les diffrents constructeurs, ce qui est logique puisquil peut ny avoir quune seule IP pour les administrer et que les seuls paramtres indispensables pour envoyer une requte SNMP sont justement ces deux arguments. Nanmoins, nous constatons que la faon dutiliser les communauts est propre chaque constructeur. HP utilise par exemple une autre convention : les membres auront pour communauts public@sw0, public@sw1, etc.
Commandeur public (public@es0) Switch 0 public@es3 Switch 3

Switch 1 public@es1 public@es2

Switch 2

Figure 19 : Nom de communaut des switchs d'un cluster

Enfin, cette fonction devant trouver les membres, faut il encore pouvoir dtecter parmi les informations SNMP obtenues ces noms de communaut. Il sest avrer que sur les quipements Cisco, ces informations sont situes dans la MIB ENTITY-MIB (rfc2737), partir de lOID suivante : OID numrique .1.3.6.1.2.1.47.1.2.1.1.4 Nom de lobjet entLogicalCommunity Description de lobjet Nom de la communaut permettant dobtenir des informations sur lentit logique correspondante

Tableau 2 : OID utilise (Fonction GetMembersOfClusterBySNMP)

Cette branche de la MIB correspond comme son nom lindique aux entits logiques et non physiques (par exemple les VLAN sy trouvent) et plus particulirement tous ce qui trait aux communauts Nous relevons dans cette branche tous les noms de communauts disponibles. Comme gnralement on y trouve galement ceux qui permettent daccder aux diffrents VLAN (cf. Fonction GetVlanTableBySNMP page 38) ainsi que la communaut par dfaut (celle que lon utilise en argument de cette fonction). Afin de ne pas retenir celles qui pointent vers le mme switch, nous rcuprons pour chaque nouveau membre potentiel leur
HERBIET Guillaume-Jean, INCATASCIATO Benoit

34/82

Moteur de dcouverte

adresse MAC et nous les comparons avec celle du switch qui serait alors commandeur. Les MAC devant normalement tre uniques, nous liminons ainsi tout doublon ! Finalement, cette fonction renvoie une liste de switchs contenant tous les membres dtects. Il faudra ensuite comparer cette liste avec celle dj existante et ajouter uniquement ceux qui ny figurent pas encore. Cest le rle de la Fonction ComparaisonSwitchsAvecListeSwitchs (page 43). Dans le cas o il ny aurait pas de cluster, cette fonction renvoie une liste vide.

e) Fonction GetSwitchMacAdrBySNMP
Cette fonction renvoie ladresse MAC du switch format par la Fonction MacFormat (page 39). Cette adresse correspond lIP du switch, autrement dit lIP que nous utilisons pour pouvoir ladministrer. Elle est obtenue partir de la MIB BRIDGE-MIB (rfc1493). Cette OID est par ailleurs obligatoire pour tout switch. OID numrique .1.3.6.1.2.1.17.1.1.0 Nom de lobjet dot1dBaseBridgeAddress Description de lobjet Adresse MAC, unique, du regroupant un ensemble de port bridge

Tableau 3 : OID utilise (Fonction GetSwitchMacAdrBySNMP)

f) Fonction GetInterfaceMacAdrBySNMP
Cette fois ci, le but est de rcuprer lensemble des adresses MAC des interfaces du switch courant. Nous lobtenons partir de la MIB ifMIB (rfc2863). OID numrique .1.3.6.1.2.1.2.2.1.6 Nom de lobjet ifPhysAddress Description de lobjet Adresse MAC de toutes les interfaces du switch

Tableau 4 : OID utilise (Fonction GetInterfaceMacAdrBySNMP)

Comme pour la fonction prcdente, les adresses sont formates grce la Fonction MacFormat (page 39). Nous avons remarqu que cet OID nous donnait galement ladresse MAC de lIP du switch, sans que nous nayons un moyen simple de la supprimer. Il faudra donc faire la diffrence des tableaux issus de cette fonction et de la prcdente.

g) Fonction GetTypeServicesBySNMP
Cette fonction permet de connatre les types de services supports sur le switch interrog. Pour cela, nous rcuprons la valeur sysServices situe dans la MIB MIB-II (rfc1213). OID numrique .1.3.6.1.2.1.1.7.0 Nom de lobjet sysServices Description de lobjet Cf. explications ci-dessous

Tableau 5 : OID utilise (Fonction GetTypeServicesBySNMP)

PROJET DE CONCEPTION

35/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Cette valeur est obtenue par un OU binaire partir des lments suivants : Bit 0x01 0x02 0x04 0x08 0x10 0x20 0x40 Valeur dcimale 1 2 4 8 16 32 64 Fonction Physique Liaison Rseau Transport Session Prsentation Application Couche OSI 1 2 3 4 5 6 7

Tableau 6 : Couches OSI et valeurs de sysServices correspondantes

Nous utiliserons plus tard cette valeur pour essayer de proposer lutilisateur le type de nud, dans le cas o nous ne laurions encore jamais rencontr. Pour plus dinformations, se reporter au paragraphe Auto-apprentissage du type des quipements page 20.

h) Fonction GetObjectIDBySNMP
Cette fonction utilise la MIB MIB-II (rfc1213). OID numrique .1.3.6.1.2.1.1.2.0 Nom de lobjet sysObjectID Description de lobjet OID du nud (entreprise, marque, rfrence du produit) en question

Tableau 7 : OID utilise (Fonction GetObjectIDBySNMP)

Cette fonction permet donc de rcuprer cette OID afin dtre utilise plus tard pour identifier le nud dtect. Sachant quil existe une liste complte des OID des constructeurs, il suffit en effet de recouper linformation obtenue avec cette liste. La seule difficult vient du fait que cette liste est longue et peut difficilement tre exploit directement, par exemple pour indiquer sil sagit dun switch ou dun routeur ! De plus, il serait long, fastidieux voir inutile de prtraiter cette liste afin dassocier un produit un type de nud ; la solution rside alors dans lauto-apprentissage. Ainsi, le script rcupre dune part lOID du produit grce cette fonction, dautre part prdit le type de matriel grce la fonction prcdente. Enfin, ces informations seront prsentes lutilisateur pour quil les vrifie et les corrige le cas chant. Cette association produit-type de lquipement sera alors mmorise par le script pour les prochaines dcouvertes.

i) Fonction GetArpTableBySNMP
Cette fonction permet de retourner la table ARP du switch (il ne sagit donc pas de la table ARP locale ; celle-ci sera rcupre par la Fonction GetLocalArpTable, page 40). Cette table se trouve dans la MIB IP-MIB (rfc1213). OID numrique .1.3.6.1.2.1.4.22.1.2 Nom de lobjet ipNetToMediaPhysAddress Description de lobjet Adresses MAC en fonction adresses IP des

Tableau 8 : OID utilise (Fonction GetArpTableBySNMP)

Nous pouvons ainsi extraire depuis lOID ladresse IP et la valeur retourne est ladresse MAC qui y est associe. Les adresses MAC obtenues sont mises en forme grce la Fonction MacFormat (page 39). Cette OID devrait tre prsente pour tout type de switch. Nanmoins, nous avons constat que certain ne rpondait pas sans pour autant que cela porte prjudice par la suite : nous avons donc ignor ce problme.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

36/82

Moteur de dcouverte

j) Fonction GetIfSpeedBySNMP
Cette fonction permet de connatre la vitesse de fonctionnement thorique de chaque port. Attention, il sagit bien de la vitesse thorique relle du port en question et non pas de sa vitesse thorique maximale de fonctionnement ! Ces informations sont tires des MIB IP-MIB (rfc1213) et ifMIB (rfc2863). OID numrique .1.3.6.1.2.1.2.2.1.5 .1.3.6.1.2.1.31.1.1.1.1 Nom de lobjet ifSpeed ifName Description de lobjet Vitesse thorique actuelle des ports du switch. Exprime en bits par seconde. Nom du port en fonction de son OID

Tableau 9 : OID utilises (Fonction GetIfSpeedBySNMP)

La premire OID donne une table indiquant la vitesse des ports en fonction de leurs OID, qui est alors recoupe avec le nom de ces mmes ports grce la table obtenue partir de la deuxime OID.

k) Fonction GetNextRouterBySNMP
Il sagit ici de rcuprer les IP des routeurs que le switch connat. On peut les obtenir depuis la MIB IP-MIB (rfc1213). OID numrique .1.3.6.1.2.1.4.21.1.7 Nom de lobjet ipRouteNextHop Description de lobjet Adresses IP des routeurs connus par ce switch

Tableau 10 : OID utilise (Fonction GetNextRouterBySNMP)

Nous obtenons juste une liste dadresses IP. Pour tre prcis, ces adresses correspondent aux prochains routeurs prsents sur une classe dIP donne. Nous pouvons par ailleurs savoir de quelle classe il sagit en interrogeant la mme MIB ladresse .1.3.6.1.2.1.4.21.1.1 (ipRouteDest). Cette dernire information nest pas rcupre car nous voulons juste trouver les routeurs et non, dans cette version du projet, savoir vers quelles routes ils pointent. A noter que des switchs de niveau 3 sont parfois prsent dans cette liste mme sils nont pas de fonction de routage active. Toutefois, cette liste tant forcment vrifie puis trie par la suite, ceci ne pose pas de problme.

l) Fonction IPScanBySNMP
Le but de cette mthode, comme son nom lindique, est de scanner une plage dIP en recherchant les quipements supportant le protocole SNMP. Pour cela, celle-ci prend en argument une liste dadresses IP ainsi quune liste de noms de communaut tester. Chaque quipement est interrog sur une OID basique (.1.3.6.1.2.1.1.5.0 : sysName) afin dune part de ne pas utiliser une MIB qui pourrait ne pas tre prsente sur tous les matriels que nous souhaitons dtecter, et dautre part pour que ce scan soit le plus rapide et le moins lourd possible (en ce qui concerne la charge du rseau). Cette fonction limine galement les doublons parmi lensemble des switchs quelle a trouvs (utile par exemple si nous scannons une plage dIP comportant plusieurs classes C et que des routeurs aient une IP dans chaque classe). Remarquons enfin que les switchs pour lesquels nous naurions pas dadresse MAC ne sont pas pris en compte : puisque tous notre moteur de dtection de la topologie du rseau se base avant tout sur les adresses MAC, ces quipements nont en effet aucun intrt pour nous !

PROJET DE CONCEPTION

37/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

m) Fonction GetVlanTableBySNMP
Cette fonction est importante car elle permet de rcuprer la liste des VLAN prsent sur un switch. De fait, il faut savoir que lorsque nous interrogeons un switch pour obtenir ces correspondances MAC/Ports, nous ne rcuprons que celles dont les ports appartiennent au VLAN par dfaut, ou dit autrement au VLAN utilis justement pour administrer le switch. Il existe cependant (au moins) une mthode permettant de rcuprer ces informations pour les autres VLAN. Puisque les requtes SNMP se base sur lIP (fixe), le nom de communaut et les MIB (galement fixes), certains constructeurs utilisent les noms de communaut (comme dans le cas des clusters) pour atteindre chaque VLAN. Signalons tout dabord qutant donn le parc informatique utilis pour nos tests, nous avons tudis ce problme uniquement avec les switchs de marque Cisco et cette fonction nest malheureusement pas valable avec ceux de marque HP ! Afin dobtenir la liste des VLAN, nous avons donc utilis la MIB propritaire CISCOVTP-MIB (VTP : VLAN Trunk Protocol) avec les OID suivantes : OID numrique .1.3.6.1.4.1.9.9.46.1.3.1.1.3 .1.3.6.1.4.1.9.9.46.1.3.1.1.4 Nom de lobjet vtpVlanType vtpVlanName Description de lobjet Type du VLAN considr Nom du VLAN considr

Tableau 11: OID utilises (Fonction GetVlanTableBySNMP)

Enfin, les numros des VLAN (qui servent didentifiant et qui sont donc uniques) se trouvent la fin de lOID. Par exemple nous trouverons les informations dsires sur le VLAN 51 en interrogeant les OID .1.3.6.1.4.1.9.9.46.1.3.1.1.3.1.51 et .1.3.6.1.4.1.9.9.46.1.3.1.1.4.1.51. La premire information (vtpVlanType indique naturellement le type de VLAN. Le seul type qui nous intresse est dans notre cas le type Ethernet et tous les autres ne seront alors pas pris en compte. Une fois ce premier tri effectu, nous rcuprons les noms des VLAN en les associant avec leurs numros. Enfin, nous avons remarqu que les VLAN de management avait pour nom default et que celuici semble ne pas tre modifiable, contrairement aux autres VLAN crs par lutilisateur. Une fois ces informations obtenues, nous pouvons crer les noms de communaut qui seront utiliss par les autres fonctions. Ceux-ci sont obtenus de manire similaire au cas des clusters de switch (cf. Fonction GetMembersOfClusterBySNMP page 34) : on ajoute au nom de communaut du switch le numro du VLAN prcd par larobase @. Voici deux exemples de noms de communaut : public@51 et public@es4@51. Dans le premier cas, le switch nest pas membre dun cluster alors quil lest dans le deuxime ! Pour finir, nous avons signal le fait que cette fonction ntait pas compatible avec des switchs autres que des Cisco. Nanmoins, cette fonction sera appele pour chaque switch est son rsultat remplacera les noms de communaut prcdemment dfinies afin de tenir compte des VLAN. Si jamais ont obtient aucune information en interrogeant la MIB indique un peu plus haut, cette fonction renvoie malgr tout le nom de communaut initial pour ne pas bloquer la suite des scripts

HERBIET Guillaume-Jean, INCATASCIATO Benoit

38/82

Moteur de dcouverte

5. Librairie Rseau
Cette librairie comporte des fonctions utiles pour les applications rseaux : MacFormat : Permet de formater correctement une adresse MAC, ComparaisonIPs : Compare deux IP en indiquant laquelle est la plus grande ou ventuellement si elles sont gales, GetLocalArpTable : Rcupre la table ARP local, GetNumericOID : transforme une OID quelconque en une OID numrique.

a) Fonction MacFormat
Cette fonction prend pour argument une adresse MAC dont le sparateur est : . Le rsultat sera cette adresse formate afin que chaque terme hexadcimal soit en majuscule et sur deux chiffres. Par exemple, ladresse 0:0:10:a1:0:ef deviendra 00:00:10:A1:00:EF. Ce formatage est important car ces adresses MAC sont considres comme des chanes de caractres et nous serons emmen les comparer entre elles ! Si jamais largument est incorrect, principalement que les sparateurs des valeurs hexadcimal ne sont pas des : , ou que ladresse ne comporte pas six lments (exemple 0:0:10:a1:0:ef ou encore 0:0:10:a1:0), le rsultat sera une chane de caractre vide.

b) Fonction ComparaisonIPs
Cette fonction compare deux adresses IP. Elle est utilise pour classer les IP des tables ARP ou encore vrifier quune adresse IP appartient bien une plage autorise. Sa particularit est dutiliser une fonction PHP ip2long qui convertie, de manire unique, une adresse IP numrique en un entier (gnralement ngatif). Cette fonction est galement employe - en conjonction de la fonction rciproque long2ip - pour gnrer une liste dIP partir dune plage donne. Il faut noter que cette fonction ip2long est galement pratique pour vrifier quune IP est correcte ou non, et dans certain cas elle peut mme corriger automatiquement cette IP (par exemple lIP 193.48.225 deviendra 193.48.226.0), mme si cette correction nest pas forcment pertinente. Dans le cas o cette fonction ne serait pas disponible pour une raison ou une autre, on peut trouver dans laide en ligne des fonctions PHP son algorithme parmi les commentaires dutilisateurs (http://fr2.php.net/manual/fr/function.ip2long.php, commentaire du 24 Avril 2004), et ainsi la recoder. Voici le code reproduit ci-dessous :
<?php if (!function_exists("ip2long")) { function ip2long($ip) { $ex = explode(".", $ip); if (count($ex)!=4) return -1; list($a, $b, $c, $d) = $ex; $a = $a*16777216; $b = $b*65536; $c = $c*256; return $a+$b+$c+$d; } } ?>

PROJET DE CONCEPTION

39/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

c) Fonction GetLocalArpTable
Cette fonction rcupre la table ARP locale, autrement dit celle du serveur sur lequel lapplication est excute. Pour cela, le script PHP va excuter la fonction systme arp an. Cette commande permet bien entendu dobtenir la table ARP, et les arguments a et n permettent respectivement dobtenir la table complte et de ne pas faire la rsolution DNS des adresses IP. La particularit de cette fonction est justement quelle fait appel une fonction systme et non une fonction PHP. De fait, ceci implique plusieurs restrictions : cette fonction ne peut tre utilise telle quelle sous Windows. Pour la faire fonctionner, il faudrait supprimer loption n et prendre en compte que la premire ligne du rsultat est la lgende du tableau retourn ! Par ailleurs, PHP ne permet daccder par dfaut quaux commandes dont les fichiers binaires se trouvent dans les dossiers /bin , /usr/bin et /usr/local/bin (sous Linux). Par exemple, le binaire se trouvait dans le dossier /usr/sbin sur notre serveur de test la rsidence. Trois solutions sont alors possibles : Nous crons un raccourci (ln s sous Linux) de /usr/sbin/arp dans /usr/bin , Nous crons un raccourci du binaire dans le dossier o se trouve la librairie puisque si la commande arp na ne fonctionne pas, la fonction essaye alors dexcuter ./arp na, Ou alors tout simplement de ne pas utiliser cette fonction en utilisant loption adquate.

Une volution possible de cette fonction serait de constituer une table de correspondance IP/DNS en enlevant loption n de la commande utilise, pour finalement ne demander le nom DNS des IP que si nous ne lavons pas encore dans notre cache. Cette particularit nest pas implmente lheure actuelle.

d) Fonction GetNumericOID
Cette fonction a pour but de transformer une OID quelconque en une OID numrique. Par exemple, lOID CISCO-VTP-MIB::vtpVlanType.1.1 devient lOID .1.3.6.1.4.1.9.9.46.1.3.1.1.3.1.1. Cette fonction peut tre utilise pour obtenir un rsultat homogne quelque soit la plate forme utilise et quelques soient les MIB qui y sont installes. Cest particulirement le cas de la Fonction GetObjectIDBySNMP (page 36). Nous obtenons cette traduction en faisant appel une fonction systme puisquil ny pas dquivalent parmi les implmentations SNMP de PHP. La commande systme est la suivante : snmptranslate On $OID o $OID est remplace par lOID traduire. Notons tout de suite que si cette OID est dj numrique, cette commande renverra alors la mme OID (nous sommes donc sr dobtenir un rsultat). Sinon, les mmes remarques de la fonction prcdente sappliquent ici puisque nous effectuons encore un appel une commande systme.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

40/82

Moteur de dcouverte

6. Librairie Topologie
La librairie Topologie contient lensemble des fonctions permettant la dcouverte de la topologie du rseau. Voici les principales : GetSwitchLinks : Dtecte les liaisons inter-switchs, GetNoManageableDevices : Dtecte les switchs non grables, ComparaisonSwitchsAvecListeSwitchs : Compare une ancienne liste de switch avec une nouvelle et retourne les lments de cette dernire qui ne font pas doublons, ComparaisonRouteursAvecListeSwitchs : Mme fonction que la prcdente sauf quil sagit cette fois ci des routeurs (le critre de comparaison nest pas le mme), FusionCorrespondancesVlans : Fusionne les correspondances MAC/Ports de chaque VLAN dun mme switch en une seule correspondance, CreationTableauLiaisons : Cre le tableau final matrialisant les liaisons entre quipements, CreationTableauEquipements : Cre le tableau final dtaillant chaque quipement, RechercheDNS : Recherche le nom DNS correspondant une adresse IP, DecouverteReseau : moteur de dcouverte de la topologie du rseau proprement dit. Il fait appel directement ou indirectement toutes les autres fonctions dtailles jusquici, ExportationVersMysql : Exporte les tableaux des liaisons et des quipements vers une base de donnes MySQL, ModificationEtatReseau : Enregistre dans deux tables spcifiques dune base de donnes les modifications apportes au rseau depuis une premire dcouverte de sa topologie.

a) Fonction GetSwitchLinks
Dcouvrir la topologie dun rseau revient notamment dcouvrir les liaisons entre les diffrents nuds. Remarquons tout dabord que nous ne le ferons que pour les switchs administrables, c'est--dire pour ceux dont nous disposons des correspondances MAC/Ports et dans la mesure o nous connaissons les adresses MAC de tous les ports des switchs (grables). Ces deux tableaux (correspondances et adresses MAC des interfaces) sont les arguments de cette fonction. Un dernier argument permet ou non de vrifier la rciprocit des liaisons (cf. Dtection des liaisons entre switchs page 17). Nous allons alors comparer ces tableaux suivant lalgorithme suivant :
Arguments de la fonction : $ListeSwitchs : Liste des switchs $AdrMacPort : Adresses MAC des ports de chaque switchs $CrspdcesMacPort : Correspondances MAC/Ports de chaque switch $test_reciprocite = true/false

PROJET DE CONCEPTION

41/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Pour chaque switch $i de $ListeSwitchs { Pour chaque port $p de $CrspdcesMacPort[$i] { Si ($test_reciprocite=true) Alors $Boucle = chaque switch $j suivant de $ListeSwitchs Sinon $Boucle = chaque switch $j de $ListeSwitchs Fin si Pour $Boucle autre que le switch courant { $intersection = Intersection($CrspdcesMacPort[$i][$p], $AdrMacPort[$j]) Si ($intersection non null) { $recriprocite_confirmee = false Pour chaque port $k de ($CrspdcesMacPort[$j] { $intersection = Intersection($CrspdcesMacPort[$j][$k], $AdrMacPort[$i]) Si ($intersection non null) { $reciprocite_confirmee = true Sortir de la boucle $k } } Si (($test_reciprocite = true ET $reciprocite_confirmee = true) OU ($test_reciprocite = false)) { Liaison trouve : mise jour du tableau rsultat Suppression de $CrspdcesMacPort[$i][$p] Eventuellement suppression de $ CrspdcesMacPort[$j][$k] } } }

} }

Comme vous pouvez le voir sur cet algorithme, nous commenons par boucler sur les ports de chaque switch (2 premires boucles), puis sur tous les autres switchs. Cette troisime boucle est diffrente suivant que la vrification de la rciprocit est faite ou non. En effet, si elle est faite, il est inutile de revrifier avec un switch sur lequel on serait dj pass (si le switch 1 voit le switch 3, alors lorsque nous en serons au switch 3, la vrification 3-1 aura dj t faite puisque la rciprocit de la liaison vrifie !). Ceci peut se traduire ainsi (les boucles portent sur le mme tableau !) :
For ($i = 0, $i < X, $i++) { For ($j = $i+1, $j < X, $j++) { } }

Par contre, si le test de rciprocit nest pas effectu, il se peut que le switch 3 voit le switch 1 mais non linverse, et lorsque nous en serons au switch 3, il faudra donc prendre en compte le 1, do les boucles suivantes :
For ($i = 0, $i < X, $i++) { For ($j = 0, $j < X, $j++) { } }

Les correspondances des liaisons trouves sont supprimes afin damliorer le temps de recherche des prochaines boucles (inutile de perdre du temps sur un lment dj utilis et sur lequel nous navons plus repasser).
HERBIET Guillaume-Jean, INCATASCIATO Benoit

42/82

Moteur de dcouverte

Finalement, nous constatons que cette fonction comporte beaucoup de boucles imbriques, mais il serait difficile de faire sans puisque de toute faon il faut comparer deux tableaux. Enfin, nous pouvons percevoir ici lintrt dutiliser le langage PHP puisque nous nous servons de la fonction Intersection(Tableau 1,Tableau 2) qui renvoie un tableau constitu des lments du tableau 1 prsent dans le tableau 2. Il aurait t par exemple ncessaire de recoder cette fonction sous Java ! Utiliser une fonction fournie tant normalement gage defficacit et rapidit, ce choix est judicieux.

b) Fonction GetNoManageableDevices
Cette fonction utilise simplement lalgorithme voqu au paragraphe Dtection des switchs non grables en page 18. Comme la fonction prcdente, le tableau $CrspdcesMacPort ainsi que la liste des switchs sont mis jours afin de tenir compte des nouveaux switchs et liaisons dtectes.

c) Fonction ComparaisonSwitchsAvecListeSwitchs
Cette fonction permet de supprimer les doublons entre deux listes de switchs. Elle prend comme arguments deux listes de switchs, une nouvelle et une ancienne. Tous les quipements de la nouvelle liste qui ne se trouvent pas dans lancienne seront renvoys dans le tableau rsultat de cette fonction. Les autres ne seront pas prsentes dans ce rsultat. Afin de comparer les listes, nous utilisons les adresses MAC des switchs, adresses censes tre uniques. Ainsi, tout quipement prsent dans la nouvelle liste qui naurait pas dadresse MAC sera dembl limin !

d) Fonction ComparaisonRouteursAvecListeSwitchs
Cette fonction est la mme que la prcdente, except le fait que la comparaison ne se fait plus sur leurs adresses MAC des quipements mais sur leurs adresses IP. Par ailleurs, cette fonction renvoie deux tableaux : le premier est la liste des nouveaux routeurs dtects afin de les rajouter aux autres, et le deuxime est la liste des doublons afin de r agencer la liste des quipements comme expos au paragraphe Dtection des routeurs (page 19).

e) Fonction FusionCorrespondancesVlans
Cette fonction a pour but de constituer un tableau unique de correspondances MAC/Ports par switch et non un par VLAN. Chaque port de la correspondance finale sera associ un ou plusieurs VLAN (sils sont connus !). En effet, il peut arriver que les liaisons entre switchs soient en mode trunk et permettent le passage des paquets appartenant plusieurs VLAN sur le mme cble. Dans ce cas de figure, lensemble des noms des VLAN sont signals sur ce port, et le numro de VLAN est mis une valeur arbitraire normalement impossible, dans notre cas -1 .

f) Fonction CreationTableauLiaisons
Cette fonction utilise trois tableaux comme arguments : les correspondances MAC/Ports, le tableau des liaisons entre switchs et enfin le tableau donnant les vitesses des ports des switchs. Le rsultat sera quant lui un seul et unique tableau, compilation des deux prcdents. En effet, les liaisons entre ordinateurs et switchs se dduisent immdiatement des correspondances MAC/Ports sur les mmes switchs. Cette fonction renvoie par ailleurs un tableau des nouveaux quipements (ordinateurs, etc.) issu de ces correspondances.

PROJET DE CONCEPTION

43/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

g) Fonction CreationTableauEquipements
Comme pour la fonction prcdente, le rsultat sera ici un tableau, combinaison du tableau des nouveaux quipements coupls avec la liste des switchs.

h) Fonction RechercheDNS
Cette fonction traduit une adresse IP en DNS (Domain Name Server). Pour cela, nous utilisons la mthode gethostbyaddr(Adresse IP) de PHP. Si le nom DNS ne peut tre trouv, nous renvoyons la valeur null.

i) Fonction ExportationVersMysql
Aprs avoir obtenu les deux tableaux PHP reprsentant les quipements et leurs liaisons (rsultat de la Fonction DecouverteReseau), il faut les enregistrer dans la base de donnes. Cest le rle de cette fonction. Elle prend donc comme argument les deux tableaux prcits, ainsi que lidentifiant du rseau correspondant. En effet, plusieurs rseaux peuvent tre surveills en mme temps et chaque topologie est stock dans un jeu de tables prfixes par cet identifiant. Pour connatre le format des tables utilises, se reporter au paragraphe Stockage des topologies page 25.

j) Fonction ModificationEtatReseau
Cette fonction permet de comparer ltat prcdent dun rseau avec ltat actuel de celui-ci. Pour commencer, ltat prcdent est enregistr dans les tables MySQL, et sobtient partir des tables ListeX et ChangementX, o X est Equipements ou Liens. Ltat actuel est quant lui reprsent par les deux tableaux PHP rsultat de la Fonction DecouverteReseau. Nous partons chaque fois de ltat actuel, et nous cherchons le corrler avec ltat prcdent. Ainsi la fonction peut se dcomposer en trois processus : Traitement des quipements possdant une adresse MAC, Traitement des quipements ne possdant pas dadresse MAC (concerne en fait uniquement les switchs/hubs non administrables dtects grce la Fonction GetNoManageableDevices. Traitement des liaisons.

Nous commenons par les quipements. Nous regardons pour chacun de ceux qui sont actuellement prsent sur le rseau, sil a dj t dtect auparavant. Chaque matriel est identifi de manire unique par un numro Id. Celui-ci est malheureusement arbitraire, est dpend de la dcouverte effectue. Nous corrlons alors dans un premier temps les Id des quipements actuels avec ceux que nous avons dj dtect (ceux qui se trouvent dans les tables MySQL). Comme un quipement est cens normalement possder une adresse MAC unique et invariable sur le rseau, nous les utilisons afin de faire cette identification. Cependant, les switchs non grable nen possdent pas. Le seul moyen de les identifier est dutiliser leurs liaisons, cest pour cela que nous les traitons dans un deuxime temps. Enfin, ds que tous les quipements sont corrls avec ceux que nous avons dj croiss, et que nous avons ventuellement ajout les nouveaux, nous pouvons nous pencher sur les liaisons puisque celles-ci se font entre ces mmes quipements et que nous avons maintenant leurs Id respectifs.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

44/82

Moteur de dcouverte

1. Traitement des quipements possdant une adresse MAC : Pour chaque quipement actuellement dtect et ayant une adresse MAC, nous excutons lalgorithme suivant :
Recherche de la MAC dans : 1. ChangementEquipements 2. ListeEquipements

non

Occurrence trouve ?

oui

Nouvel Equipement

Ancien ID

Nouvel ID

Calcul du nouvel ID

oui
Actif=0 ?

non

Ajout, ID = nouvel ID Rapparition oui Modification ? non

Modification

Mise jour, ID = ancien ID

MisAJour = 1 pour toutes ces ID

Figure 20 : Algorithme de traitement des quipements avec MAC

La recherche initiale se fait dabord dans la table ChangementEquipements puis si nous ny trouvons pas la MAC, dans ListeEquipements. Cet ordre nous permet dobtenir, si lquipement existait dj auparavant, son dernier tat. Lattribut MisAJour est donc mis 1 ds quun ancien quipement a t trait. Ainsi la fin, ceux qui auront cet attribut 0 pourront tre supprims car cela signifie quil nexiste plus actuellement. A noter que toute modification se traduit par lajout dune ligne dans la table ChangementX et non pas par ldition voire la suppression concrte de lenregistrement incrimin. Ainsi il sera possible tout moment de reconstituer la topologie du rseau un instant dtermin, et non de connatre uniquement le dernier tat du rseau. 2. Traitement des quipements ne possdant pas dadresse MAC : Nous avons vu que le traitement prcdent utilis les adresses MAC. Ceci est malheureusement impossible pour les nuds rseaux non administrables : nous ne connaissons alors pas leurs adresses MAC ! Nous allons essayer didentifier ces nuds actuels avec les anciens grce leurs liaisons. Pour cela, nous commenons donc par constituer les deux tableaux suivant :

PROJET DE CONCEPTION

45/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

AnciensEquipementsNonGerables[ID ancien quipement] = liste des quipements auquel il est connect, NouveauxEquipementsNonGerables[ID nouveau quipement] = liste des quipements auquel il est connect.

Enfin nous allons comparer, pour chaque entre du tableau NouveauxEquipementsNonGerables, la liste associe celle correspondante aux anciens quipements, et ce pour tous les anciens quipements non grable : nous faisons lintersection de ces deux tableaux. Au final, nous retenons lID de lancien quipement o lintersection donne le plus de rsultat : nous choisissons ainsi lancien quipement qui correspond le plus vraisemblablement lquipement que nous avons actuellement. Si aucun rsultat nest trouv, alors lquipement actuel est nouveau. Nous constituons ainsi un tableau associant quipements actuels et anciens quipements. Une fois cette corrlation effectus entre les ID des nuds non administrables, nous utilisons le mme algorithme que prcdemment, sauf que nous navons pas rechercher les adresses MAC : nous connaissons dj les ID des quipements. Remarquons que nous ne sommes pas assurs de retrouver un ancien switch correspondant celui que nous sommes entrain de tester, mme sil existe rellement. Par contre, le rsultat final sera quand mme correcte puisque dans le pire des cas, le switch actuel sera dclar comme tant nouveau et lancien supprim. Le rsultat est donc toujours juste, mais nous gaspillons de la place mmoire pour stocker ces informations puisque nous rajoutons alors deux lignes l o nous aurions pu nen mettre quune, voire aucune sil ny a pas eu de modifications. Une fois que tous les quipements actuels (avec ou sans MAC) ont t traits, tous les anciens quipements qui ont pour attribut MisAJour = 0 nexistent plus est sont donc supprims (ajout dune ligne par quipement dans la table ChangementEquipements). 3. Traitement des liaisons : Le traitement des liaisons est calqu sur celui des quipements.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

46/82

Moteur de dcouverte

Pour chaque liaison actuelle, lalgorithme suivant est excut :


Recherche de IdEq1 et IdEq2 dans : 1. ChangementLiens 2. ListeLiens

non

Occurrence trouve ?

oui

Nouvelle liaison

Ancien ID

Nouvel ID

Calcul du nouvel ID

oui
Actif=0 ?

non

Ajout, ID = nouvel ID Rapparition oui Modification ? non

Modification

Mise jour, ID = ancien ID

MisAJour = 1 pour toutes ces ID

Figure 21 : Algorithme de traitement des liaisons

L encore, toutes les anciennes liaisons qui au final ont lattribut MisAJour = 0 sont supprimes.

k) Fonction DecouverteReseau
Il sagit de la fonction principale de ce programme puisque cest elle qui doit tre appele pour dcouvrir automatiquement la topologie du rseau. Cette fonction ne prend comme argument une srie de tableaux : options, liste initiale des switchs, noms de communauts tester, plages dadresses IP scanner et celles autorises, etc. Elle suit lagencement dcrit au paragraphe

PROJET DE CONCEPTION

47/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Processus de dcouverte (page 24). La Figure 22 donne une vue densemble de cette fonction tandis que la Figure 23 reprsente son droulement complet.
Dcouverte de la topologie Dtection initiale des switchs

Dtection des administrables

quipements

Boucle sur les switchs Recherche dautres switchs Correspondances MAC/Port Dtections des liaisons et quipements Informations complmentaires Rsultat final : - Tableau dquipements - Tableau de liaisons

Rcupration des informations ncessaires

Obtention de la topologie

Figure 22 : Vue simplifie de la Fonction DecouverteReseau

HERBIET Guillaume-Jean, INCATASCIATO Benoit

48/82

Moteur de dcouverte

Figure 23 : Algorithme de la Fonction DecouverteReseau

Enfin le pseudo-code ci-dessous dtaille cette fonction :


//Initialisation des diffrents tableaux utiliss : Initialisation des Options $ListeSwitchs = Initialisation de la liste des switchs prtablie $ListeCommunities = Initialisation de la liste des noms de communaut tester $PlageIPs = Initialisation de la liste des plages dIP scanner $PlageIPsAllowed = Initialisation de la liste plages dIP autorises

PROJET DE CONCEPTION

49/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP


Rcupration des adresses MAC et des ObjectID (OID du constructeur) des switchs dj connus // Scanne des IP : Si (autorisation_scan) { Pour chaque plage dIP a scanner { Gnration de la liste dIP scanner partir de la plage dfinie IPScanBySNMP(liste dIP a scanner,$ListeCommunities) Mise en cache des informations SNMP pour les IP qui le supporte dans $CacheInfoSNMP } Si (autorisation_arp) $ArpTable = GetLocalArpTable() la fonction

Ajoute $ListeSwitchs le rsultat de ComparaisonSwitchsAvecListeSwitchs($NouveauxSwitchs,$ListeSwitchs) } Sinon si (autorisation_arp) { $ArpTable = GetLocalArpTable() } // Boucle gnrale sur chaque switch : Pour chaque switch $i de $ListeSwitchs { // Recherche des clusters Cisco : Si (autorisation_recherche_cluster ET $i non encore vrifi) { GetMembersOfClusterBySNMP($i["IP"],$i["Community"]) Ajoute $ListeSwitchs le rsultat ComparaisonSwitchsAvecListeSwitchs(nouveaux switchs,$ListeSwitchs) }

de

la

fonction

// Rcupration de la table ARP : Ajoute $ArpTable le rsultat de GetArpTableBySNMP($i["IP"],$i["Community"]) // Recherche des routeurs : GetNextRouterBySNMP($i["IP"],$i["Community"]) ComparaisonRoutersAvecListeSwitchs(routeurs,$ListeSwitchs,$PlageIPsAllowed) Rcupre les informations sur les routeurs et limine les doublons Si (routeur non encore trait par cette boucle et nest pas un doublon) { Le switch $i+1 passe en fin de liste Le nouveau routeur est insr la place du switch $i+1 } Si le routeur $j est un doublon : permutation du switch $i+1 avec ce routeur $j Rcupration des vitesses des ports du switch $i // Dtection des VLAN : GetVlanTableBySNMP($i['IP'],$i['Community']) // Rcupration des correspondances MAC/Ports GetInterfaceMacAdrBySNMP($i["IP"],$i["Community"]) Pour chaque VLAN $j du switch $i { GetCorrespondancePortMacBySNMP($i["IP"],nom de communaut du VLAN $j) Pour chaque Port des correspondances { Suppression des adresses MAC des ports du switch sur ses correspondances. Suppression des ports o il ny a aucune adresse MAC } FusionCorrespondancesVlans(correspondances des VLAN du switch $i) } } Suppression des adresses MAC des IP des switchs sur chaque correspondance

HERBIET Guillaume-Jean, INCATASCIATO Benoit

50/82

Moteur de dcouverte
// Recherche des liaisons inter-switchs : Suppression des adresses MAC des switchs sur les MAC des ports des switchs ($AdrMacPort) GetSwitchLinks($ListeSwitchs,$AdrMacPort,$CrspdceMacPort,avec test rciprocit) // Recherche des liaisons switchs-routeurs : GetSwitchLinks($ListeSwitchs,$AdrMacPort,sans test rciprocit) // Recherche des quipements non grable : GetNoManageableDevices($ListeSwitchs,$CrspdceMacPort) // Constitution des tableaux Liaisons et Equipements : CreationTableauLiaisons($LiaisonSwitchs,$CrspdceMacPort,$VitessePort) CreationTableauEquipements($ListeSwitchs,autres nuds,$RArpTable,$CacheInfoSNMP) Si (autorisation_recherche_dns) RechercheDNS(tableau Equipements) // Rsultats de la fonction : - Tableau Liaisons - Tableau Equipements

E. Limitations
Plusieurs limitations vis--vis du moteur de dcouverte existent. Certaines sont inhrentes aux technologies employes, dautres dcoulent dun manque de temps afin de dvelopper des solutions alternatives, et enfin certaines fonctionnalits peuvent tre facilement ajoutes dans le futur.

1. Dtection des routeurs


Les routeurs sont actuellement dtects, mais comme nous nobtenons pas gnralement leurs correspondances MAC/Ports, ils apparaissent parfois en multiples exemplaires (un par subnet). Ainsi un routeur possdant trois pattes dans des sous rseaux de subnet diffrent risque au final dapparatre trois fois dans nos donnes. Le seul moyen dviter ces doublons et dobtenir les adresses MAC des interfaces du routeur, ce qui nest pas toujours possible. Ensuite, il sagit au moment de vrifier les doublons entre quipements, aprs leurs dtections (scan dune plage dadresse IP, mode poursuite, etc.), de prendre en compte les adresses MAC des interfaces du matriel. Actuellement, seules les adresses dites dadministrations (celle associ lIP permettant de grer le routeur) sont utilises. De plus, pour les routeurs nous utilisons leurs IP et non leurs MAC. Il faudrait donc reprendre ces deux fonctions (ComparaisonSwitchsAvecListeSwitchs et ComparaisonRouteursAvecListeSwitchs).

2. Dtection des liaisons inter-switchs


Actuellement nous testons la rciprocit des liaisons afin de sassurer quelles existent. Nous pourrions tenter de nous en affranchir. Il faudrait cependant cerner le problme qui nous a oblig faire une telle vrification (cf. Fonction GetSwitchLinks page 41), puis le rsoudre.

3. Dtection des nuds non grables


Les limitations inhrentes lutilisation du protocole SNMP sont exposes au paragraphe de la fonction correspondante (page 43). Il pourrait tre intressant de se renseigner sur dventuelles mthodes alternatives (ou complmentaires !). Nanmoins, ces mthodes seront certainement lourdes mettre en place, si tant est quil en existe une efficace ! Il faudrait alors peser le pour et le contre pour savoir si se donner autant de peine est ncessaire.

PROJET DE CONCEPTION

51/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

4. Utilisation de MIB propritaires


La Fonction GetVlanTableBySNMP utilise une MIB propritaire Cisco. Bien que ces MIB soient gnralement reprisent par les autres constructeurs, il serait intressant de pouvoir sen affranchir. Dans le mme esprit, certaines fonctions ne sont oprationnels quavec des quipements de marque Cisco, mme si elles utilisent des MIB standards. Concrtement, il faudrait disposer dquipements dautre marque afin de tester et recoder ces fonctions pour quelles puissent tourner avec ces nouveaux matriels.

5. Surveillance de ltat du rseau


La fonction permettant de trouver les modifications intervenues sur le rseau peut dans un premier temps tre optimise. Par ailleurs, il serait prfrable de repenser le systme de suivie des modifications. Pour le moment, le moteur est excut rgulirement avec des options variables suivant quil sagisse dune dcouverte initiale ou rgulire. Le problme rsulte du protocole SNMP. Trs pratique pour une utilisation ponctuelle ou pour administrer un rseau, il nest pas adapt une surveillance temps rel . En effet, il se peut quun nud ne rponde pas. En ltat actuel du moteur, cet quipement sera considr comme ayant disparu du rseau et sera supprim . Il faudrait donc mettre en place un systme de ressaies successifs (ce qui veut aussi dire dtecter lorsquil y a erreur) pour que lquipement soit dclar inactif (ou plus exactement presque inactif ) aprs un certain nombre dessais infructueux. En ce qui concerne les terminaux, il serait prfrable pour une surveillance trs rgulire (frquence de lordre de la dizaine de minute par exemple) dutiliser un simple ping. En effet, nous surchargerions alors moins le rseau. Linconvnient de cette mthode est quel ncessite de connatre potentiellement tous les terminaux possibles puisque seuls serait pinger ceux qui auront t dtect par le moteur de dcouverte, donc indirectement par SNMP, une premire fois. Nous ne pouvons effectivement surveiller ceux que nous ne connaissons pas encore (seul le moteur de dcouverte le permet) ! Dautre part, plutt que dexcuter le moteur pour lensemble des nuds, nous pourrions le faire nuds aprs nuds dans un ordre dfini. Le moteur le permet puisquil suffit de lui prciser de travailler uniquement sur une liste de switch que nous lui donnerions, et de constituer ainsi un certain nombre de listes de un ou deux nuds chacune. Enfin il faudrait se pencher sur la structure de la base de donnes pour savoir sil ne serait pas possible de loptimiser et ainsi rendre lalgorithme de la Fonction ModificationEtatReseau plus simple et optimal.

6. Bornes Wifi
Nous avons constat que les bornes Wifi de lcole sont dtectes comme tant des nuds rseaux (ce qui est le cas) et alors interroge. Malheureusement, les rsultats semblent parfois aberrant, notamment lorsque les bornes sont connects en Wifi avec les routeurs, ce qui nest pas physiquement le cas ! Nous navons pas pu cerner exactement le problme faute daffichage de la topologie ce moment l. Nanmoins, ce problme vient peut tre du fait que les bornes utilisent rarement les MIB standards. Dans ce cas, nous avons deux possibilits : rajouter des fonctions permettant dinterroger ces quipements (donc grossomodo une fonction par marque), ou alors les ignorer et ne pas les interroger. Dans tous les cas, ces mthodes ncessite de connatre au moment ou le moteur de recherche est excut le type de matriel rencontr et dadapter ses requtes en fonction.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

52/82

Moteur de dcouverte

7. Fonctionnalits supplmentaires
Le moteur de dcouverte tant maintenant cod, il est facile de rcuprer des informations supplmentaires sur les quipements, et obtenir pour ne citer quun exemple le type de liaison entre deux quipements (fibre optique, cuivre, etc.).

PROJET DE CONCEPTION

53/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

IV. Interface utilisateur et reprsentation graphique


Linterface utilisateur sera la partie merge de liceberg que constitue notre application. Elle doit permettre de grer un maximum de paramtres de manire simple et conviviale et garantir un affichage de qualit sous de nombreuses plates-formes.

A. Prsentation de linterface utilisateur


Dans cette partie, nous allons prsenter de manire gnrale linterface utilisateur ainsi que les technologies qui ont permis de la raliser ainsi que son implmentation, afin que toute personne suivant la reprendre, la modifier, lamliorer (ce qui est grandement possible) puisse le faire aisment.

1. Description de linterface
Linterface de lutilisateur se dcompose en 5 parties distinctes. Comme dans ce domaine, une bonne illustration vaut mieux que de longs discours, un aperu de cette interface est fourni en Figure 24.

Figure 24 : Aperu de l'interface graphique

Elle permet de faire apparaitre de haut en bas et de gauche droite : un bandeau de titre (en bleu) qui porte le nom que nous avons retenu pour notre application ( savoir snmpWatch : pourquoi ? pourquoi pas !) ; un menu (barre grise juste en-dessous) qui permet daccder tous les lments de linterface ; une barre latrale qui permet de grer lauthentification des utilisateurs et qui fournit galement des informations et des liens utiles ;
54/82

HERBIET Guillaume-Jean, INCATASCIATO Benoit

Interface utilisateur et reprsentation graphique

la zone de contenu ou sont affiches les informations essentielles de la page un pied de page, qui renvoie vers des validateurs de code du W3C et vers les sites officiels de PHP et MySQL

2. Structure des menus


Voici rsum succinctement les diffrentes fonctionnalits que lon retrouve au sein de chaque menu, elles reprsentent chacune des fonctions diffrentes de linterface utilisateur :

a) Gestion des utilisateurs


Elle repose sur lutilisation de sessions de PHP, coupls la table User qui stocke les logins et mots de passes des utilisateurs, ainsi que diverses informations les concernant. Le principe en est le suivant : lautorisation dafficher le contenu des pages nest donne que si: Une session identifiant lutilisateur existe Le bon couple login/mot de passe est fourni via un formulaire (on dmarre alors une session identifiant lutilisateur)

b) Gestion des rseaux


Lapplication permet de surveiller diffrents rseaux. Lajout/suppression des rseaux se fait via un formulaire et lon utilise des tables prfixes par leur Id (identifiant numrique unique) pour distinguer les tables. Grce aux formulaires de cette partie, il est possible : On peut spcifier les paramtres par dfaut de lobservation On peut uploader une image qui servira de fond pour la reprsentation de la topologie (typiquement un plan du lieu sur lequel est implant le rseau)

Figure 25 : Formulaire de cration de rseau

PROJET DE CONCEPTION

55/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

c) Gestion des quipements


Via linterface utilisateur, il est possible de grer le concept de types dquipements . En effet, chaque lment du rseau est identifi par un type. Il existe trois types par dfaut : Routeur, Switch, Switch/Layer 3, Switch/Hub (qui reprsentent les types essentiels pour les nuds du rseau : c'est--dire ceux qui sont reconnus automatiquement par SNMP). Mais il est galement possible dajouter dautres types (pour identifier des quipements particuliers comme des serveurs, ) Chaque type est reprsent par une icne dans la reprsentation de la topologie du rseau (les icnes sont modifiables via un formulaire et de nouvelle icnes peuvent tre uploades). Pour les quipements qui possdent une OID, il est possible de raliser un apprentissage de la nature des quipements. Pour ce faire, on leur assigne un type (estim via le SysServices fourni par SNMP mais il peut tre erron) qui peut tre modifi par la suite via un formulaire. Cette modification permet par la suite de les reprsenter correctement dans la topologie du rseau.

Figure 26 : Apprentissage du type d'quipement

d) Affichage de la topologie et monitoring rseau


Cest le rsultat la fois du travail du moteur de recherche, mais aussi de tout le paramtrage russi par lutilisateur dans les diverses autres parties du site. Un formulaire semblable celui de la Figure 25 permet de personnaliser laffichage de la topologie rseau, mais nous reviendrons sur cette fonction particulire dans une prochaine partie. Il est galement possible dafficher les derniers vnements rseaux (cest ce que lon nomme monitoring ) sous forme tabulaire ou des codes couleurs (prciss dans la partie latrale du site) permettent didentifier le type dvnement survenu.

Figure 27 : Monitoring des vnements


HERBIET Guillaume-Jean, INCATASCIATO Benoit

56/82

Interface utilisateur et reprsentation graphique

Cette partie du site permet galement de choisir la plage temporelle sur laquelle afficher les vnements du rseau en cours de surveillance.

3. Structures des fichiers


Les pages de linterface utilisateurs sont des fichiers PHP4 (extension .php) et son construits de la manire dcrite dans les lignes suivantes, qui permet une grande flexibilit et une modification rapide du contenu des pages : chaque page qui saffiche est constitu en fait de deux fichiers, un se situant la racine du site, lautre tant plac dans le sous rpertoire pages, les deux fichiers portant exactement le mme nom.

a) Description du fichier racine


Le fichier racine contient relativement peu de code mais remplit des fonctions essentielles, voici la manire dont il doit tre renseign :
<?php // Inclusion automatique de toutes les librairies de fonctions $RepertoireFonctions = dir("fonctions") or die("<b>Erreur :</b> Merci de vrifier l'intgrit du script."); while($item = $RepertoireFonctions->read()) { if (ereg("\.php$", $item)) include "fonctions/".$item; } // Dbut de la procdure dutilisation // Si le formulaire a t valid, on lance la procdure d'utilisation if (isset($_POST['submit_identification'])) { $Autorisation = IdentifierUtilisateur ($_POST['login'], $_POST['mot_de_passe'], "User", "Id", "Login", "MotDePasse"); } // Sinon, on rifie si l'utilisateur est autoris afficher la page else { $Autorisation = VerifierAutorisation("Id"); } // Variables de la page $Page["Titre"] = "Titre de la page"; $Page["Contenu"] = "chemin_vers/ficihier_de_contenu.php"; $Page["Lateral"] = "chemin_vers/fichier_encart_lateral.php"; // Affichage de la page include("pages/layout.php"); ?>

La premire partie permet dinsrer dynamiquement tout les fichiers du rpertoire fonctions dont lextension est .php, ce qui revient inclure toutes les librairies de fonctions ncessaires linterface utilisateur.

Figure 28 : Arborescence du site

PROJET DE CONCEPTION

57/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Ensuite, on procde lauthentification de lutilisateur (qui repose sur lutilisation de session PHP) dont le fonctionnement sera dcrit plus bas dans ce document. Enfin, il est ncessaire de renseigner trois champs du tableau Page : Titre : chaine de caractre correspondant au titre de la page Contenu : chemin complet vers le fichier implmentant le contenu de la page (pour respecter la logique de lapplication, ce fichier doit tre plac dans le rpertoire pages et porter le mme nom que le fichier racine). Lateral : peut contenir le contenu de lespace latral gauche de la page (pour respecter la logique de lapplication, si le nom du fichier racine est ma_page.php, ce fichier doit tre accessible depuis pages/ma_page_lateral.php).

Ensuite, la page layout.php est appele, elle gnre dynamiquement la mise en page du site. Remarquons que laccent a t mis sur le respect des normes du W3C (World Wide Web Consortium) et que le code de linterface utilisateur est conforme (sauf erreur) aux normes XHTML 1.0 Strict et CSS 2.0. Lors dventuels futurs dveloppements, il est primordial de veiller au respect de ces mmes normes (accessibles via http://www.w3.org/). Le contenu des pages doit lui aussi tre structur, larchitecture de base est la suivante :
<h3> <?php echo $Page["Titre"]; ?></h3> <p>Texte de la page.</p>

Qui permet dafficher en tant que titre la chaine de caractres qui a t dfinie dans le fichier racine et dinsrer du texte reconnu comme un paragraphe solidaire. Pour respecter la mise en page, la structure des lments de la partie latrale de linterface doivent eux respecter la structure suivante :
<h3>Titre du panneau</h3> <ul> <li>Premier lment</li> <li>Deuxime lment</li> <li>Troisime lment</li> </ul>

Dautre part, pour assurer le respect des normes du W3C lors de linsertion dimages, il est prfrable dutiliser la fonction suivante, disponible dans la librairie Images.
AfficherImage ("chemin_vers/le_fichier_image.ext");

B. Gestion des formulaires


Dans la plupart des pages du site, le contenu se rsume des formulaires, plus ou moins complexes, qui permettent dinteragir avec le moteur de dcouverte L encore, le respect des normes du W3C est assur par lutilisation de la librairie Formulaires qui implmente et facilite la cration de formulaire dont le code est valide XHTML 1.0 et CSS 2.0. Le code suivant permet de crer simplement un formulaire complexe :
// Contenu du formulaire // Champ pour l'OID du matriel $Contenu[0][0] = "text"; $Contenu[0][1] = "OID du produit";

HERBIET Guillaume-Jean, INCATASCIATO Benoit

58/82

Interface utilisateur et reprsentation graphique


$Contenu[0][2] = array("Modif[OID]", 30, 255, $Modif['OID'], "text"); // Champ pour le type de matriel $Contenu[1][0] = "select"; $Contenu[1][1] = "Type du produit"; $Contenu[1][2] = array("Modif[IdType]", "ListeTypes", "Nom", "Id", "Nom ASC", $Modif['IdType']); // Champ pour le nom du matriel $Contenu[2][0] = "text"; $Contenu[2][1] = "Nom du produit"; $Contenu[2][2] = array("Modif[NomProduit]", 30, 255, $Modif['NomProduit'], "text"); // Fin du contenu pour le formulaire echo Formulaire("modifier", $_SERVER['PHP_SELF']."?e=".$_GET['e'], $Contenu, "Modification des paramtres d'un matriel");

En fait, il suffit de dfinir un tableau Contenu qui est un tableau deux dimensions. La premire dimension sert indexer les diffrents champs prsents dans le formulaire. Elle compte autant dlments que le nombre de champs dans le formulaire. La seconde dimension comporte toujours trois lments : le premier sert dfinir le type de champ ; le second est le texte qui sera affich en vis--vis du champ ; le troisime est un tableau contenant les paramtres du champ qui varient suivant le type de champ.

Les types de champs permettent de balayer les types classiques dfinis en XHTML plus certains types spciaux que nous avons jugs utile dimplmenter : text : cre un champ texte classique password : cre un champ mot de passe classique checkbox : cre une liste de cases cocher partir des lments dune table MySQL checkbox_tableau : cre une liste de cases cocher partir des lments dun tableau select : cre une liste droulante partir des lments dune table MySQL radio : cre une liste de boutons radio partir des lments dun tableau textarea : cre une zone de texte multi ligne classique file : cre un champ classique permettant de tlcharger une image sur le serveur repertoire_images : cre une liste de boutons radio listant toutes les images (JPEG et PNG) dun rpertoire grille : cre un champ texte dont la valeur est modifie lors du clic sur une image (utilis pour le placement des quipements rseau)

Les paramtres diffrent suivant le type de champ choisi, pour les connaitre, il est ncessaire de consulter la documentation interne du fichier formulaires.php laquelle une attention toute particulire a t porte. Une fois le tableau deux dimensions Contenu convenablement renseign, il suffit dappeler la fonction Formulaire avec les arguments suivants :
echo Formulaire("nom_formulaire", "page_destination.php", $Contenu, "Titre du formulaire", $afficher_fieldset, $type_formulaire);

PROJET DE CONCEPTION

59/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Avec les particularits suivantes : $afficher_fieldset : est un boolen et permet dafficher ou non un fieldset (sorte de bordure regroupant les champs) $type_formulaire : est une chaine de caractre prcisant le type dencodage du formulaire. Il peut ne pas tre prcis (argument facultatif) sauf pour les formulaires permettant lupload de fichier ou il doit valoir "mixed-form/data".

C. Affichage de la topologie du rseau


Cette fonction est la fois le plus intressante du point de vue de lutilisateur et la plus complexe de la part du programmeur. Elle a t ralise grce la librairie GD de PHP qui permet de gnrer de manire dynamique des images. Elle a t teste avec succs avec la version 2.0.28 de GD. Le but de cette fonction est dafficher tout ou partie de la topologie rseau avec les paramtres que lutilisateur fournit dans un formulaire. Chaque quipement affich peut tre cliqu afin de faire apparaitre ses caractristique et de le positionner sur la reprsentation topologique. Les icones reprsentant les nuds sont celles correspondant au type du nud, elles sont personnalisables, comme nous lavons vu prcdemment. Les couleurs de liens ont galement leur importance puisquils reprennent le mme code couleur que laffichage des vnements rseau pour signifier le type de modification observe.

Figure 29 : Reprsentation de la topologie d'un rseau

1. Fonction daffichage de la topographie


Laffichage de la topographie est ralise par le fichier pages/topographie.php qui fait appel notamment aux bibliothques de fonctions Affichage et Images. Comme les appels de fonctions sont assez complexes, nous indiquons ici en pseudo code la succession des tapes permettant cet affichage.
Rcupration de lId du rseau en cours dutilisation

HERBIET Guillaume-Jean, INCATASCIATO Benoit

60/82

Interface utilisateur et reprsentation graphique


Rcupration de la taille de limage afficher (fonction de la rsolution dcran) SI (une image de fond existe) { On utilise limage de fond redimensionne } SINON { On cre une image blanche de la bonne taille } On dfinit le nombre de cases de limage On calcule la taille des cases On dfinit la longueur des liaisons en pixels On gnre une clause de recherche des quipements fonction des paramtres saisis par lutilisateur On rcupre la liste des quipements concerns avec leurs infos que ce soit dans la liste ou dans les changements On ralise la clause de recherche des liaisons fonction des paramtres saisis par lutilisateur Recherche des liaisons impliquant les lments slectionns Equipements qui ont t visits = 0 Liaisons qui ont t visites = 0 $LiaisonsVisitees = array(); On trouve un point de dpart du rseau : le(s) routeur(s) Si aucun routeur n'a t trouv dans la liste des quipements, on l'ajoute de force Pour chacun des routeurs trouvs { On positionne l'quipement On note la position de cette equipement On appelle la fonction rcursive AfficherLiasions } On appelle la fonction daffichage des icones On cre la map qui servira cliquer sur les images Enfin, on affiche l'image du resau

On dtaille de mme le fonctionnement de AfficherLiaisons


AfficherLiaisons ($Image, $DimensionsImage, $Equipements, $EquipementsVisites, $EquipementPrecedent, $Liaisons, $LiaisonsVisitees, $LongueurLiaisons, $Coef, $Position, $Niveau, $AfficherVitesse) { Pour chacune des liaisons { SI (la liaisons s'effectue avec l'quipement et si elle n'a pas dj t visite) { On rcupre l'id de l'quipement l'autre bout de la liaison On recherche le nouvel equipement dans la liste Si a ce stade le nouvel quipement n'a pas t trouv, c'est qu'il s'agit d'un quipement que nous ne souhaitions pas afficher au dpart mais que nous afficherons quand mme (c'est un noeud terminal du graphe que nous affichons) } On positionne le nouvel quipement On trace la liaison en cours d'tude On slectionne la couleur de la liaison fonction du type dvennement trouv AjouterLiaison ($Image, $Position[$EquipementPrecedent['Id']], $Position[$nouvel_equipement['Id']], max($liaison['Vitesse1'], $liaison['Vitesse2']), $couleur, $AfficherVitesse); On marque la liaison comme visite Si (le noeud n'est pas terminal) { on explore les liaisons qui le concernent

PROJET DE CONCEPTION

61/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP


AfficherLiaisons($Image, $DimensionsImage, $Equipements, $EquipementsVisites, $nouvel_equipement, $Liaisons, $LiaisonsVisitees, $LongueurLiaisons, $Coef, $Position, $Niveau+1, $AfficherVitesse); } On a parcouru toutes les liaisons pour cet quipement, on peut le marquer comme visit } }

2. Positionnement des images


Le positionnement des images est par dfaut partiellement alatoire, mais, afin doffrir une vue tout de mme hirarchise, il rpond quand mme deux critres : tous les quipements sont la mme distance de lquipement auquel ils sont relis la distance entre les quipements diminue avec la profondeur de lquipement : c'est--dire le nombre de nuds traverss depuis un des routeurs du rseau
$Coef, $Niveau,

Le positionnement des quipements est ralis par la fonction suivante :


function PositionnerEquipement($DimensionsImage, $LongueurLiaisons, $Equipement, $EquipementPrecedent = "") { SI (aucune position prdfinie) { SI (pas dquipement prcdent) { On positionne lquipement dans un coin de limage } SINON { Angle de rotation $alpha = pris au hasard entre 0 et 2*pi Nouvelle Longueur = $LongueurLiaisons/($Niveau*$Coef); Variation longeur = cos($alpha)*Nouvelle Longueur; Variation hauteur = sin($alpha)*$nouvelle_longueur; } } SINON { On renvoie la position enregistre }

HERBIET Guillaume-Jean, INCATASCIATO Benoit

62/82

Conclusion

Conclusion
Ce projet nous a permis de consolider nos connaissances sur les rseaux informatiques, connaissances empirique mais aussi issu du cours de Systmes dInformation dispens durant la mme squence. Au niveau programmation, il nous a galement permis dapprofondir nos connaissances sur les interfaces graphiques et la gestion des options de visualisation. Comme nous nous y attendions, ce projet na pas t de toute simplicit mais malgr les difficults rencontres, le rsultat est relativement satisfaisant, mme sil est toujours possible de lamliorer.

PROJET DE CONCEPTION

63/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Annexes
Prambule
Les trois premires annexes rcapitulent lensemble des fonctions prsentes dans les trois librairies dvelopp pour ce projet. Chacune des fonctions est suivie dune courte description et les arguments et rsultats des fonctions sont dtaills, notamment en ce qui concerne le format des tableaux (PHP) utiliss. La quatrime annexe liste lensemble des objets SNMP utiliss avec les fonctions de la librairie SNMP. La cinquime annexe explicite la mthode utilise pour rcuprer les correspondances MAC/Ports des switchs.

Annexe 1 : Librairie SNMP et fonctions


Cette librairie est constitue de lensemble des fonctions utilisant le protocole SNMP. Fonctions Description

GetCorrespondancePortMacBySNMP Rcupre les correspondances MAC/Ports Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Optimisation (boolen) : active ou non les optimisations de la fonction (cf. Fonction GetCorrespondancePortMacBySNMP page 32) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau des correspondances de la forme suivante : Index Nom du port Adresses MAC sur ce port Index Adresse MAC 1 (string) 0 0 (string) Index Adresse MAC

1 Toutes les adresses MAC sont au format XX:XX:XX:XX:XX:XX, ce qui signifie que les chiffres hexadcimal sont systmatiquement sur deux chiffres ou lettres, et en majuscules pour ces dernires (exemple : 0A au lieu de a). Cf. la Fonction MacFormat page 39.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

64/82

Annexes

GetMembersOfClusterBySNMP Trouve les membres dun cluster Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau des nouveaux switchs dcouvert : ID Nom IP Community sysServices Type ObjectID 2 3 5 (string) (string) 0 04 (string) (string) (int) 0 GetSwitchMacAdrBySNMP Donne ladresse MAC du switch interrog Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Adresse MAC correspondant lIP utilise pour grer le switch : (string) GetInterfaceMacAdrBySNMP

MAC
(string)

Donne les adresses MAC de toutes les interfaces du switch

Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau listant les adresses MAC des interfaces (ports) du switch : Index Adresse MAC (string) 0 GetTypeServicesBySNMP Indique le type de services fournis par le switch (cf. modle OSI)

Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Valeur du sysServices (cf. la description de cette fonction page 35)

Toutes les adresses IP ont la forme XXX.XXX.XXX.XXX, c'est--dire par exemple que le chiffre 1 sera traduit en 001. Cette adresse IP peut techniquement tre remplace par le nom DNS correspondant. 3 Cf. Fonction GetTypeServicesBySNMP page 35. 4 Le champ type est automatiquement rempli la valeur 0. Le champ est complt pour montrer quil existe, mais la valeur correcte sera cherche quau moment de lexcution de la Fonction CreationTableauEquipements. 5 Cf. Fonction GetObjectIDBySNMP page 36.

PROJET DE CONCEPTION

65/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

GetObjectIDBySNMP Donne lobjet ID de lquipement Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : OID du produit (fonction du constructeur, marque, type dquipement, etc.) GetArpTableBySNMP Rcupre la table ARP du switch Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Table ARP : Adresse IP Adresse MAC
(string) (string)

GetIfSpeedBySNMP

Trouve les vitesses de fonctionnement interfaces rseaux du switch des

Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau associant les ports et leurs vitesses (en bits par seconde) Nom du port Vitesse du port
(string) (int)

GetNextRouterBySNMP

Rcupre les adresses IP des routeurs que le switch connait

Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau listant les adresses IP des routeurs connus par le switch : Index Adresse IP (string) 0

HERBIET Guillaume-Jean, INCATASCIATO Benoit

66/82

Annexes

IPScanBySNMP Scanne une liste dIP par SNMP Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau des nouveaux switchs dcouvert : ID Nom IP Community sysServices Type ObjectID (string) (string) (string) (int) (string) 0 0 0 GetVlanTableBySNMP

MAC
(string)

Recherche les diffrents VLAN prsents sur le switch

Arguments : Adresse IP ou nom DNS du switch interroger (string) Nom de la communaut utiliser. Par dfaut public (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau des VLAN : Index ID Nom DefaultVLAN Community (int) (string) (boolean) (string) 0

PROJET DE CONCEPTION

67/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Annexe 2 : Librairie Rseau et fonctions


Cette librairie regroupe les fonctions utiles pour toutes applications rseaux. Fonctions Description

MacFormat Vrifie quune adresse MAC a le bon format, et si besoin la reformate Arguments : Adresse MAC vrifier (string) Niveau de dbogage : cf. Dbogage page 28 Rsultat : Adresse MAC formate ComparaisonIPs Compare deux adresses IP en indiquant laquelle est plus grande que lautre, ou si elles sont gales

Arguments : Adresse IP 1 (string) Adresse IP 2 (string) Rsultat : Cette fonction renvoie lune des trois valeurs suivantes : o 0 si les deux adresses IP sont gales, o 1 si ladresse IP 1 est plus grande que ladresse IP 2, o -1 dans le cas inverse. GetLocalArpTable Obtient la table ARP locale du serveur Arguments : Niveau de dbogage : cf. Dbogage page 28 Rsultat : Table ARP : Adresse IP Adresse MAC
(string) (string)

GetNumericOID Traduit une OID quelconque en une OID numrique Arguments : OID traduire (string) Rsultat : OID sous forme numrique (string)

HERBIET Guillaume-Jean, INCATASCIATO Benoit

68/82

Annexes

Annexe 3 : Librairie Topologie et fonctions


Cette librairie contient toutes les fonctions ne servant qu ce programme. Tous les tableaux qui seront reprsents dans cette annexe le seront dans leurs formes minimales. Autrement dit, ces tableaux peuvent contenir des paires (cls, valeurs) supplmentaires, mais seront alors ignores par les fonctions concernes. Par contre, si ces formes minimales ne sont pas respectes, les fonctions ne pourront pas oprer correctement et les rsultats seront inexacts. Fonctions Description

GetSwitchLinks Construit la table des liaisons inter-switchs Arguments : Tableau listant les switchs dtects : Index des switchs 0 Tableau contenant les adresses MAC des interfaces des switchs : Index Adresses MAC des ports du switch switchs Index Adresse MAC (string) 0 0 Index Adresse MAC Correspondances MAC/Ports des switchs (tableau) : Index Correspondances du switch switchs Index Nom Adresses MAC sur ce Numro Nom ports du port port VLAN VLAN Index Adresse MAC (string) (int) (string) (string) 0 0 0 Index Adresse MAC Index Nom Adresses MAC sur ce Numro Nom ports du port port VLAN VLAN Index Adresse MAC Rciprocit (boolen) : active ou non la vrification de la rciprocit des liaisons (cf. Fonction GetSwitchLinks page 41) Niveau de dbogage : cf. Dbogage page 28

PROJET DE CONCEPTION

69/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Rsultat : Tableau suivant : Index liaison Extrmit Index switch 0 (int) 0 1er extrmit 1 0 2e extrmit Extrmit Index switch 0 1er extrmit
2e extrmit

Liaison Port
(string)

N VLAN
(int)

Nom VLAN
(string)

Port

N VLAN

Nom VLAN

Correspondances MAC/Ports donnes en argument, o les ports relatifs aux liaisons nouvellement cres ont t supprims. Mme format que le tableau

HERBIET Guillaume-Jean, INCATASCIATO Benoit

70/82

Annexes

GetNoManageableDevices

Dtection des nuds non grables et construction de la table des liaisons correspondante

Arguments : Tableau listant les switchs dtects : Index des switchs 0 Correspondances MAC/Ports des switchs (tableau) : Index Correspondances du switch switchs Index Nom Adresses MAC sur ce Numro Nom ports du port port VLAN VLAN Index Adresse MAC (string) (int) (string) (string) 0 0 0 Index Adresse MAC Index Nom Adresses MAC sur ce Numro Nom ports du port port VLAN VLAN Index Adresse MAC Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau suivant : Index Liaison liaison Extrmit Index switch Port N VLAN Nom VLAN 0 (int) (string) (int) (string) 0 1er extrmit 1 0 e
2 extrmit

Extrmit Index switch 0 1er extrmit


2e extrmit

Port

N VLAN

Nom VLAN

1 2

Liste des nouveaux switchs dtects (mme format que les autres listes de switchs) Correspondances MAC/Ports donnes en argument, o les ports relatifs aux liaisons nouvellement cres ont t supprims. Mme format que le tableau

PROJET DE CONCEPTION

71/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

ComparaisonSwitchsAvecListeSwitchs

Compare deux listes dquipements et supprime les doublons. A utiliser avec tout quipement sauf routeurs

Arguments : Tableau des nouveaux switchs comparer : ID Nom MAC (string) (string) 0 Tableau des switchs dj dtects (qui vont servir pour la comparaison) : ID Nom MAC (string) (string) 0 Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau listant les nouveaux switchs (donc issus du premier argument de cette fonction) qui ne sont pas prsent dans les anciens switchs dj dtects (donc issus du deuxime argument). Ce tableau le mme format que les tableaux donns en argument (la forme expos ici est la forme minimale, mais dautres colonnes peuvent composer ces tableaux, et ces colonnes se retrouveront naturellement dans le tableau rsultat !) ComparaisonRouteursAvecListeSwitchs Compare deux listes dquipements et supprime les doublons. A utiliser avec les routeurs

Arguments : Tableau listant les adresses IP des routeurs : Index Adresse IP (string) 0 Liste des switchs dj connus (tableau) : ID Nom IP (string) (string) 0 Liste des plages dadresses IP autorises (tableau) : Index Plage dadresses IP Adresses limitant la plage Adresse IP (string) 0 Dbut Fin Adresses limitant la plage Adresse IP Dbut Fin Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau suivant : Liste des adresses IP des routeurs initiale o les IP apparaissant aussi dans la 0 liste des switchs dj connus ont t supprimes Liste des index des switchs dj connus apparaissant aussi dans la liste des 1 adresses IP des routeurs.
HERBIET Guillaume-Jean, INCATASCIATO Benoit

72/82

Annexes

FusionCorrespondancesVlans

Renvoie une correspondance MAC/Ports unique partir des correspondances de chaque VLAN

Arguments : Correspondances MAC/Ports dun switch (tableau) : Index Correspondances du switch pour les VLAN diffrents VLAN Index Nom Adresses MAC sur ce ports du port port Index Adresse MAC (string) 0 (string) 0 0 Index Adresse MAC Index Nom Adresses MAC sur ce ports du port port Adresse Index MAC Liste des VLAN des switchs (tableau) : Index VLAN ID Nom Dfaut Community 0
(int) (string) (boolen) (string)

ID Nom Dfaut Community Optimisation (boolen) : active ou non les optimisations de la fonction Niveau de dbogage : cf. Dbogage page 28 Rsultat : Correspondances MAC/Ports du switch (tableau) : Index Nom Adresses MAC sur ce Numro Nom ports du port port VLAN VLAN Index Adresse MAC (string) (int) (string) (string) 0 0 Index Adresse MAC CreationTableauLiaisons Cre le tableau des liaisons final Arguments : Tableau liant les vitesses des ports des switchs leurs noms : Index Switch Nom port Vitesse port 0
(string) (int)

Nom port

Vitesse port

PROJET DE CONCEPTION

73/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Liste des liaisons inter-switchs (tableau) : Index Liaison liaison Extrmit Index switch Port 0 (int) (string) 0 1er extrmit 1 e
2 extrmit

N VLAN
(int)

Nom VLAN
(string)

N VLAN

Nom VLAN

Extrmit Index switch 0 1er extrmit


2e extrmit

Port

Correspondances MAC/Ports des switchs (tableau) : Index Correspondances du switch switchs Index Nom Adresses MAC sur ce Numro ports du port port VLAN Index Adresse MAC (string) (int) (string) 0 0 0 Index Adresse MAC Index Nom Adresses MAC sur ce Numro ports du port port VLAN Adresse Index MAC Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau suivant : Switch 1 Switch 2 VLAN 1 VLAN 2 Nom VLAN 1 Nom VLAN 2 Port 1 Port 2 Index

Nom VLAN
(string)

Nom VLAN

Vitesse 1
(int)

Liaisons

Equipements

0 (int) Index 0

(int)

(string)

(string)

(int)

(int)

(string)

(string)

(int)

ID de lquipement
(int)

Adresse MAC
(string)

HERBIET Guillaume-Jean, INCATASCIATO Benoit

74/82

Vitesse 2

Annexes

CreationTableauEquipements Cre le tableau des quipements final Arguments : Tableau des switchs : ID Nom IP Community sysServices Type ObjectID MAC (string) (string) (string) (int) (string) (string) 0 0 0 Autres quipements dtects (tableau issu de la fonction prcdente) : Index ID de lquipement Adresse MAC (int) (string) 0 Table ARP inverse (table RARP) : Adresse MAC Adresse IP
(string) (string)

Tableau liant les ObjectID aux types dquipements : ObjectID (OID) Type dquipement
(string) (int)

Cache SNMP : cache contenant les informations des quipements ayant rpondus au ping SNMP, mais tant des terminaux et non des nuds rseaux (serveurs par exemple). Ce tableau la forme suivante : IP Nom Community sysServices ObjectID
(string) (string) (string) (int) (string)

Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau des quipements : Index Equipement ID Nom IP MAC Community sysServices (int) (string) (string) (string) (string) (int) 0 ID Nom IP MAC Community sysServices RechercheDNS Arguments : Tableau des quipements : Index ID Nom IP MAC (int) (string) (string) (string) 0 ID Nom IP MAC

Type
(int)

ObjectID
(string)

Type

ObjectID ...

Recherche le nom DNS correspondant une IP

Equipement Community sysServices


(string) (int)

Type
(int)

ObjectID
(string)

Community sysServices

Type

ObjectID ...

PROJET DE CONCEPTION

75/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Rsultat : Tableau des quipements, complt avec les noms DNS : Index Equipement Community sysServices ObjectID
(string)

MAC

Type

Nom

0
(int)

(string)

(string)

(string)

(string)

(int)

(int)

(string)

Nom

MAC

Community

sysServices

Type

ObjectID

DNS
76/82

ID

DecouverteReseau

IP

Moteur de dcouverte de la topologie du rseau

Arguments : Tableau rcapitulant les options du moteur :

Options UtilisationListeSwitch ScanPlageIP ScanIP_ModePoursuite ScanIP_ModePoursuite_Profondeur UsePlageIPsAllowed CmdArp SearchMembersOfCluster RechercheDNS


Liste initiale de switchs interroger :

Statut
(boolen) (boolen) (boolen) (int) (boolen) (boolen) (boolen) (boolen)

ID 0

Nom
(string)

IP
(string)

Community
(string)

Liste de noms de communauts scanner :

Index 0

Nom de communaut
(string)

Plage dadresses IP Adresses limitant la plage Adresse IP (string) Dbut Fin Adresses limitant la plage Adresse IP Dbut Fin

Plages dadresses IP scanner :

Index 0

HERBIET Guillaume-Jean, INCATASCIATO Benoit

DNS

ID

IP

Annexes

Plages dadresses IP autorises : Index Plage dadresses IP Adresses limitant la plage Adresse IP (string) 0 Dbut Fin Adresses limitant la plage Adresse IP Dbut Fin Table associant OID est type de nud : ObjectID (OID) Type dquipement
(string) (int)

Niveau de dbogage : cf. Dbogage page 28 Rsultat : Tableau suivant : Vitesse 1


(int)

Liaisons

0 Index

(int)

(int)

(string)

(string)

(int)

(int)

(string)

(string)

(int)

Equipement Community sysServices

ObjectID

MAC

Type

Nom

Equipements

0
(int)

(string)

(string)

(string)

(string)

(int)

(int)

(string)

(string)

Nom

MAC

Community

sysServices

Type

ObjectID

DNS
77/82

ID

IP

PROJET DE CONCEPTION

DNS

ID

IP

Vitesse 2

Switch 1

Switch 2

VLAN 1

VLAN 2

Nom VLAN 1

Nom VLAN 2

Port 1

Port 2

Index

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

ExportationVersMysql

Exporte les tableaux dquipements et de liaisons vers une base de donnes MySQL

Arguments : Tableau des liaisons : Vitesse 1


(int)

0 (int) (int) (string) Tableau des quipements : Index Nom

(string)

(int)

(int)

(string)

(string)

(int)

Equipement Community sysServices ObjectID MAC Type DNS


(string)

ID

0
(int)

(string)

(string)

IP

(string)

(string)

(int)

(int)

(string)

Nom

MAC

Community

sysServices

Type

ObjectID

DNS
78/82

ID

Prfixe des tables (prfixe identifiant le rseau). Cf. Fonction ExportationVersMysql page 44. Rsultat : Entres dans la base de donnes

IP

HERBIET Guillaume-Jean, INCATASCIATO Benoit

Vitesse 2

Switch 1

Switch 2

Nom VLAN 1

VLAN 1

VLAN 2

Nom VLAN 2

Port 1

Port 2

Index

Annexes

ModificationEtatReseau

Enregistre dans une base de donnes MySQL les modifications survenues sur le rseau depuis un tat de rfrence

Arguments : Date (et heure) laquelle le nouvel tat du rseau t obtenu Tableau des liaisons : Vitesse 1
(int)

0 (int) (int) (string) Tableau des quipements : Index Nom

(string)

(int)

(int)

(string)

(string)

(int)

Equipement Community sysServices ObjectID MAC Type DNS


(string)

ID

0
(int)

(string)

(string)

IP

(string)

(string)

(int)

(int)

(string)

Nom

MAC

Community

sysServices

Type

ObjectID

DNS
79/82

ID

Prfixe des tables (prfixe identifiant le rseau). Cf. Fonction ModificationEtatReseau page 44. Niveau de dbogage : cf. Dbogage page 28 Rsultat : 1. Entres dans la base de donnes

IP

PROJET DE CONCEPTION

Vitesse 2

Switch 1

Switch 2

VLAN 1

VLAN 2

Nom VLAN 1

Nom VLAN 2

Port 1

Port 2

Index

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

Annexe 4 : OID et MIB utilises


La Figure 30 ci-dessous reprsente lensemble des objets SNMP utiliss dans la libraire du mme nom. Sont dtaills les OID compltes des objets (numrique et symbolique), les noms des objets utiliss, les MIB dans lesquelles on peut les trouver, ainsi que les fonctions qui sy rapportent.

Figure 30 : Objets SNMP utiliss, OID et MIB correspondantes


HERBIET Guillaume-Jean, INCATASCIATO Benoit

80/82

Annexes

Annexe 5 : Rcupration des correspondances MAC/Ports


La mthode explicit ci-aprs est une gnralisation du processus expos dans une documentation Cisco disponibles parmi les documentations fournies avec les sources du programme, ou encore ladresse suivante : http://cisco.com/en/US/tech/tk648/tk362/technologies_tech_note09186a00801c9199.shtml. Hypothses : le nom de communaut en lecture est public , @1 correspond au VLAN 1 et est le suffixe ajouter au nom de communaut, xcisco est le nom du nud interrog, nous recherchons ladresse MAC 00:00:0C:07:AC:08.

Remarque : Si nous cherchons une ou des adresses MAC sur le VLAN par dfaut, il nest pas ncessaire de prciser le VLAN dans le nom de communaut. Instructions tape par tape : 1. Dans cet exemple, le VLAN 1 est utilis pour obtenir la table dadresses MAC apprises par le switch et appartenant au VLAN 1. Cette table correspond lobjet dot1dTpFdbAddress (.1.3.6.1.2.1.17.4.3.1.1) : snmpwalk v2c c public@1 xcisco .1.3.6.1.2.1.17.4.3.1.1 17.4.3.1.1.0.0.12.7.172.8 = Hex: 00 00 0C 07 AC 08 17.4.3.1.1.0.1.2.27.80.145 = Hex: 00 01 02 1B 50 91 17.4.3.1.1.0.1.3.72.77.90 = Hex: 00 01 03 48 4D 5A 2. Maintenant que nous avons trouv ladresse MAC cherche, il faut trouver sur quel pont (bridge) elle est connecte. Nous rcuprons donc dot1dTpFdbPort (.1.3.6.1.2.1.17.4.3.1.2) pour chercher le numro du bridge : snmpwalk v2c c public@1 xcisco .1.3.6.1.2.1.17.4.3.1.2 17.4.3.2.0.12.7.172.8 = 13 17.4.3.1.2.0.1.2.27.80.128 = 13 17.4.3.1.1.0.1.2.27.80.145 = 13 3. Une fois le numro du pont connu pour le VLAN 1, il faut savoir quel port il est reli, soit donc connatre lifIndex du port en question. Ceci sobtient partir de dot1dBasePortIfIndex (.1.3.6.1.2.1.17.1.4.1.2) : snmpwalk v2c c public@1 xcisco .1.3.6.1.2.1.17.1.4.1.2 17.1.4.1.2.13 = 2 17.1.4.1.2.14 = 3 17.1.4.1.2.15 = 4

PROJET DE CONCEPTION

81/82

DECOUVERTE DE TOPOLOGIE ET SURVEILLANCE RESEAU PAR PROTOCOLE SNMP

4. Connaissant enfin lifIndex du port, nous allons chercher son nom depuis lobjet ifName (.1.3.6.1.2.1.31.1.1.1.1) : snmpwalk v2c c public@1 xcisco .1.3.6.1.2.1.31.1.1.1.1 31.1.1.1.1.1 = VL1 31.1.1.1.1.2 = Fa0/1 31.1.1.1.1.3 = Fa0/2 En rsum, nous avons trouv ltape ladresse MAC cherche. Ltape deux nous permet de connatre le pont sur lequel elle apparat, et partir de l le port sur lequel elle se trouve grce ltape trois. Enfin la dernire tape permet de connatre le nom du port : ladresse MAC 00:00:0C:07:AC:08 a t apprise sur le port Fa0/1. Afin dobtenir les correspondances MAC/Ports des switchs, on commence par lister les ports (tape 3), on cherche en parallle leurs noms (tape 4) et leur bridge sur lesquels ils sont connects (tape 2) et enfin on regarde les MAC se trouvant sur ces ponts (tape 1). A chaque fois, nous rcuprons dabord les tables compltes, puis nous corrlons systmatiquement les OID des objets jusqu trouver linformation dsire.

HERBIET Guillaume-Jean, INCATASCIATO Benoit

82/82

Vous aimerez peut-être aussi