Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
215snmp:70_exercice-pratique [le 13/07/2010 à 16:25] – prof | 215snmp:70_exercice-pratique [le 30/06/2018 à 15:43] (Version actuelle) – prof | ||
---|---|---|---|
Ligne 161: | Ligne 161: | ||
Il faut bien entendu installer le module '' | Il faut bien entendu installer le module '' | ||
+ | ==== Premier essai ==== | ||
+ | Grâce par exemple au [[http:// | ||
+ | |||
+ | Voici un premier code php (>= 5.2) : | ||
+ | <code php> | ||
+ | <?php | ||
+ | // nous souhaitons traiter les OIDs de façon numérique | ||
+ | snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | ||
+ | |||
+ | $OID = ' | ||
+ | |||
+ | $X = snmprealwalk(' | ||
+ | foreach($X as $key => $value) { | ||
+ | $macAddr = $key; | ||
+ | $port = $value; | ||
+ | echo $port.' | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | La fonction '' | ||
+ | |||
+ | La fonction '' | ||
+ | * la cible (adresse IP ou nom DNS) ; | ||
+ | * la communauté ; | ||
+ | * l'OID d'où l'on veut partir. | ||
+ | |||
+ | Ceci va nous donner le résultat suivant : | ||
+ | < | ||
+ | INTEGER: 11 == .1.3.6.1.2.1.17.4.3.1.2.0.5.93.8.128.1 | ||
+ | INTEGER: 5 == .1.3.6.1.2.1.17.4.3.1.2.0.19.212.88.167.204 | ||
+ | INTEGER: 23 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.128 | ||
+ | INTEGER: 23 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.206 | ||
+ | INTEGER: 24 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.0 | ||
+ | INTEGER: 24 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.79 | ||
+ | INTEGER: 0 == .1.3.6.1.2.1.17.4.3.1.2.0.33.145.133.119.77 | ||
+ | INTEGER: 6 == .1.3.6.1.2.1.17.4.3.1.2.0.35.84.55.145.46 | ||
+ | INTEGER: 8 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.84.111 | ||
+ | INTEGER: 9 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.85.170 | ||
+ | INTEGER: 10 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.97.178 | ||
+ | INTEGER: 4 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.185 | ||
+ | INTEGER: 3 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.199 | ||
+ | INTEGER: 7 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.100.151 | ||
+ | INTEGER: 13 == .1.3.6.1.2.1.17.4.3.1.2.144.230.186.157.115.173 | ||
+ | </ | ||
+ | Pas bien exploitable. Il nous faut nettoyer un peu : | ||
+ | * les clés (OIDs) en enlevant l'OID de la table ('' | ||
+ | * les données en enlevant le type ('' | ||
+ | |||
+ | ==== Deuxième essai ==== | ||
+ | Comme ceci n'est pas un cours de PHP, voici juste une façon de faire, parmi tant d' | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | // nous souhaitons traiter les OIDs de façon numérique | ||
+ | snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | ||
+ | |||
+ | $OID = ' | ||
+ | |||
+ | $X = snmprealwalk(' | ||
+ | foreach($X as $key => $value) { | ||
+ | $macAddr = substr($key, | ||
+ | $port = explode(': | ||
+ | echo $port[1].' | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | Ceci nous donne déjà quelque chose de plus exploitable : | ||
+ | < | ||
+ | 11 == 0.5.93.8.128.1 | ||
+ | 5 == 0.19.212.88.167.204 | ||
+ | 23 == 0.23.8.228.70.128 | ||
+ | 23 == 0.23.8.228.70.206 | ||
+ | 24 == 0.23.8.228.197.0 | ||
+ | 24 == 0.23.8.228.197.79 | ||
+ | 0 == 0.33.145.133.119.77 | ||
+ | 6 == 0.35.84.55.145.46 | ||
+ | 8 == 0.48.132.58.84.111 | ||
+ | 9 == 0.48.132.58.85.170 | ||
+ | 10 == 0.48.132.58.97.178 | ||
+ | 4 == 0.48.132.58.99.185 | ||
+ | 3 == 0.48.132.58.99.199 | ||
+ | 7 == 0.48.132.58.100.151 | ||
+ | 13 == 144.230.186.157.115.173 | ||
+ | </ | ||
+ | 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' | ||
+ | Créons une fonction dans laquelle nous injecterons l' | ||
+ | <code php> | ||
+ | function parseMacAddr($T) { | ||
+ | $tok = strtok($T," | ||
+ | while ($tok !== false) { | ||
+ | $oct=dechex($tok); | ||
+ | settype($oct," | ||
+ | if (strlen($oct)==1) $oct = " | ||
+ | $macAddr = $macAddr.$oct.":"; | ||
+ | $tok = strtok(" | ||
+ | } | ||
+ | $macAddr = substr($macAddr, | ||
+ | return $macAddr; | ||
+ | } | ||
+ | </ | ||
+ | La fonction '' | ||
+ | |||
+ | === La solution définitive(? | ||
+ | Finalement, le code suivant : | ||
+ | <code php> | ||
+ | <?php | ||
+ | function parseMacAddr($T) { | ||
+ | $tok = strtok($T," | ||
+ | while ($tok !== false) { | ||
+ | $oct=dechex($tok); | ||
+ | settype($oct," | ||
+ | if (strlen($oct)==1) $oct = " | ||
+ | $macAddr = $macAddr.$oct.":"; | ||
+ | $tok = strtok(" | ||
+ | } | ||
+ | $macAddr = substr($macAddr, | ||
+ | return $macAddr; | ||
+ | } | ||
+ | |||
+ | // nous souhaitons traiter les OIDs de façon numérique | ||
+ | snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | ||
+ | |||
+ | $OID = ' | ||
+ | |||
+ | $X = snmprealwalk(' | ||
+ | foreach($X as $key => $value) { | ||
+ | $macAddr = parseMacAddr(substr($key, | ||
+ | $port = explode(': | ||
+ | settype($port[1],' | ||
+ | $Y[$macAddr]=$port[1]; | ||
+ | } | ||
+ | |||
+ | unset($X); | ||
+ | asort($Y); | ||
+ | |||
+ | foreach($Y as $key => $value) { | ||
+ | echo $value.' | ||
+ | } | ||
+ | ?> | ||
+ | </ | ||
+ | donne quelque chose d' | ||
+ | < | ||
+ | 0 == 00: | ||
+ | 3 == 00: | ||
+ | 4 == 00: | ||
+ | 5 == 00: | ||
+ | 6 == 00: | ||
+ | 7 == 00: | ||
+ | 8 == 00: | ||
+ | 9 == 00: | ||
+ | 10 == 00: | ||
+ | 11 == 00: | ||
+ | 13 == 90: | ||
+ | 23 == 00: | ||
+ | 23 == 00: | ||
+ | 24 == 00: | ||
+ | 24 == 00: | ||
+ | </ | ||
+ | Notre tableau '' | ||
+ | ===== Pour finir ===== | ||
+ | Beaucoup d' |
Exercice pratique: Dernière modification le: 13/07/2010 à 16:25 par prof