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 14/07/2010 à 15:55] – prof | 215snmp:70_exercice-pratique [le 30/06/2018 à 15:43] (Version actuelle) – prof | ||
|---|---|---|---|
| Ligne 164: | Ligne 164: | ||
| Grâce par exemple au [[http:// | Grâce par exemple au [[http:// | ||
| - | Voici un premier code php : | + | 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: 14/07/2010 à 15:55 par prof