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 à 16:03] – 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> | <code php> | ||
<?php | <?php | ||
- | $OID = ' | + | // nous souhaitons traiter les OIDs de façon numérique |
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | ||
+ | |||
+ | $OID = ' | ||
$X = snmprealwalk(' | $X = snmprealwalk(' | ||
foreach($X as $key => $value) { | foreach($X as $key => $value) { | ||
- | $adrMac | + | $macAddr |
$port = $value; | $port = $value; | ||
- | echo $port.' | + | echo $port.' |
} | } | ||
?> | ?> | ||
</ | </ | ||
- | Qui va nous donner le résultat suivant : | + | 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: 11 == .1.3.6.1.2.1.17.4.3.1.2.0.5.93.8.128.1 | ||
Ligne 197: | Ligne 205: | ||
INTEGER: 13 == .1.3.6.1.2.1.17.4.3.1.2.144.230.186.157.115.173 | INTEGER: 13 == .1.3.6.1.2.1.17.4.3.1.2.144.230.186.157.115.173 | ||
</ | </ | ||
- | Pas bien exploitable. | + | Pas bien exploitable. |
+ | * les clés (OIDs) en enlevant l'OID de la table ('' | ||
+ | * les données en enlevant | ||
+ | |||
+ | ==== Deuxième essai ==== | ||
+ | Comme ceci n'est pas un cours de PHP, voici juste une façon de faire, parmi tant d' | ||
<code php> | <code php> | ||
<?php | <?php | ||
- | $OID = ' | + | // nous souhaitons traiter les OIDs de façon numérique |
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); | ||
+ | |||
+ | $OID = ' | ||
$X = snmprealwalk(' | $X = snmprealwalk(' | ||
foreach($X as $key => $value) { | foreach($X as $key => $value) { | ||
- | $adrMac | + | $macAddr |
$port = explode(': | $port = explode(': | ||
- | echo $port[1].' | + | echo $port[1].' |
} | } | ||
?> | ?> | ||
Ligne 230: | Ligne 245: | ||
13 == 144.230.186.157.115.173 | 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 à 16:03 par prof