Académique Documents
Professionnel Documents
Culture Documents
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
2/82
Introduction
II.
A. B.
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
4/82
Introduction
IV.
A. 1. 2. a) b) c) d) 3. a) B. C. 1. 2.
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
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.
6/82
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.
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
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
8/82
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 :
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
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.
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
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
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
12/82
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
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.
Nous allons dtailler dans les paragraphes suivant les diffrentes mthodes retenues pour mener bien cette dcouverte.
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
16/82
Moteur de dcouverte
Port 1
Port 3
Port 4
PROJET DE CONCEPTION
17/82
Le Switch 1 voit la MAC :7B:10 sur sont port 4 Le Switch 2 voit la MAC :8E:4A sur sont port 4
Port 2
Port 3
Port 2
Port 3
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.
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
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 !
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
VLAN 1 & 2
VLAN 1
PROJET DE CONCEPTION
21/82
S4
S1 S3 S2
Profondeur 0 Subnet 1
Profondeur 1 Subnet 2
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
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.
24/82
Moteur de dcouverte
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.
PROJET DE CONCEPTION
25/82
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
Id OID NomProduit
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
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.
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.
PROJET DE CONCEPTION
29/82
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
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.
PROJET DE CONCEPTION
31/82
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
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 :
32/82
Moteur de dcouverte
Extrait de $Bridge_Port_ifIndex[port courant] : - ifIndex du port courant - OID du port courant Nom du port = $Port_ifIndex_Name[ifIndex]
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] }
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
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 2
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
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
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
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
PROJET DE CONCEPTION
35/82
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
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
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
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.
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
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
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
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
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
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
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.
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
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
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.
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
Modification
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
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.
46/82
Moteur de dcouverte
non
Occurrence trouve ?
oui
Nouvelle liaison
Ancien ID
Nouvel ID
Calcul du nouvel ID
oui
Actif=0 ?
non
Modification
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
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
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
Obtention de la topologie
48/82
Moteur de dcouverte
PROJET DE CONCEPTION
49/82
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
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.
PROJET DE CONCEPTION
51/82
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.
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
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.
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
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
PROJET DE CONCEPTION
55/82
56/82
Cette partie du site permet galement de choisir la plage temporelle sur laquelle afficher les vnements du rseau en cours de surveillance.
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.
PROJET DE CONCEPTION
57/82
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");
58/82
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
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".
60/82
PROJET DE CONCEPTION
61/82
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
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.
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.
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)
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
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
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
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
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)
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
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)
68/82
Annexes
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
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
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
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
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
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
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)
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 ...
Type
(int)
ObjectID
(string)
Community sysServices
Type
ObjectID ...
PROJET DE CONCEPTION
75/82
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
Statut
(boolen) (boolen) (boolen) (int) (boolen) (boolen) (boolen) (boolen)
ID 0
Nom
(string)
IP
(string)
Community
(string)
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
Index 0
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)
Liaisons
0 Index
(int)
(int)
(string)
(string)
(int)
(int)
(string)
(string)
(int)
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
ExportationVersMysql
Exporte les tableaux dquipements et de liaisons vers une base de donnes MySQL
(string)
(int)
(int)
(string)
(string)
(int)
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
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)
(string)
(int)
(int)
(string)
(string)
(int)
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
80/82
Annexes
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
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.
82/82