Outils pour utilisateurs

Outils du site


Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
215snmp:70_exercice-pratique [le 15/07/2010 à 09:53] prof215snmp:70_exercice-pratique [le 30/06/2018 à 15:43] (Version actuelle) prof
Ligne 210: Ligne 210:
  
 ==== Deuxième essai ==== ==== Deuxième essai ====
 +Comme ceci n'est pas un cours de PHP, voici juste une façon de faire, parmi tant d'autres. [[http://fr.php.net/manual/fr/ref.strings.php|La documentation officielle de PHP]] vous sera éventuellement d'un grand secours.
  
 <code php> <code php>
Ligne 220: Ligne 221:
  $X = snmprealwalk('172.16.252.4', 'public',$OID);  $X = snmprealwalk('172.16.252.4', 'public',$OID);
  foreach($X as $key => $value) {  foreach($X as $key => $value) {
- $adrMac = substr($key,strlen($OID)+1) ;+ $macAddr = substr($key,strlen($OID)+1) ;
  $port = explode(': ',$value,2);  $port = explode(': ',$value,2);
- echo $port[1].' == '.$adrMac.'<br />';+ echo $port[1].' == '.$macAddr.'<br />';
  }  }
  ?>  ?>
Ligne 244: Ligne 245:
 13 == 144.230.186.157.115.173 13 == 144.230.186.157.115.173
 </code> </code>
-Pour trier correctement le tableau par numéro de port croissantil va falloir convertir les valeurs qui sont des chaines de caractères en entiers+Cependant : 
 +  * les adresses MAC (les clés) ne sont pas dans un format exploitable (représentation hexadécimale) ; 
 +  * les ports (les données) sont sous forme de texte, si bien qu'un tri se fera suivant le code ASCII, ce qui n'a pas de sens ici. 
 +Nous allons donc créer un second tableau, avec des clés (adresses MAC) dans le format utilisé sur FreeRADIUS et des données de type entier. 
 +==== Troisième essai ==== 
 +=== L'adresse MAC === 
 +Créons une fonction dans laquelle nous injecterons l'adresse sous sa forme décimaleet qui nous renverra une chaine sous forme hexadécimale, avec le délimiteur '':''
 +<code php> 
 + function parseMacAddr($T) { 
 +     $tok = strtok($T,"."); 
 +     while ($tok !== false) { 
 + $oct=dechex($tok); 
 + settype($oct,"string"); 
 + if (strlen($oct)==1) $oct = "0".$oct; 
 + $macAddr = $macAddr.$oct.":"; 
 + $tok = strtok("."); 
 +
 + $macAddr = substr($macAddr,0,strlen($macAddr)-1); 
 + return $macAddr; 
 +
 +</code> 
 +La fonction ''strtok'' n'est pas d'un usage bien intuitif, mais pour ceux qui ne la connaissent pas, la documentation donne des exemples clairs. 
 + 
 +=== La solution définitive(?) === 
 +Finalement, le code suivant :
 <code php> <code php>
  <?php  <?php
Ligne 260: Ligne 285:
  }  }
   
 + // nous souhaitons traiter les OIDs de façon numérique
 + snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC);
 +
  $OID = '.1.3.6.1.2.1.17.4.3.1.2';  $OID = '.1.3.6.1.2.1.17.4.3.1.2';
- +
- snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); +
  $X = snmprealwalk('172.16.252.4', 'public',$OID);  $X = snmprealwalk('172.16.252.4', 'public',$OID);
  foreach($X as $key => $value) {  foreach($X as $key => $value) {
Ligne 280: Ligne 306:
  ?>  ?>
 </code> </code>
 +donne quelque chose d'acceptable :
 +<code>
 +0 == 00:21:91:85:77:4d
 +3 == 00:30:84:3a:63:c7
 +4 == 00:30:84:3a:63:b9
 +5 == 00:13:d4:58:a7:cc
 +6 == 00:23:54:37:91:2e
 +7 == 00:30:84:3a:64:97
 +8 == 00:30:84:3a:54:6f
 +9 == 00:30:84:3a:55:aa
 +10 == 00:30:84:3a:61:b2
 +11 == 00:05:5d:08:80:01
 +13 == 90:e6:ba:9d:73:ad
 +23 == 00:17:08:e4:46:80
 +23 == 00:17:08:e4:46:ce
 +24 == 00:17:08:e4:c5:4f
 +24 == 00:17:08:e4:c5:00
 +</code>
 +Notre tableau ''Y'' contient les informations issues du switch dans un format que l'on pourra aisément utiliser dans des requêtes sur notre base MySQL.
 +===== Pour finir =====
 +Beaucoup d'autres informations intéressantes peuvent être obtenues par SNMP. Toujours sur nos switchs, il peut être utile de visualiser le trafic sur certains ports pour surveiller par exemples des goulots d'étranglement. SNMP couplé à des outils comme Cacti ou Zabbix permettra alors d'obtenir de jolis graphes et d'en conserver l'historique.
Exercice pratique: Dernière modification le: 15/07/2010 à 09:53 par prof