bonjour,
je construis un petit programme pour récupérer les adresses MAC des
machines connectées sur un routeur.
Pour cela j'utilise le module Net::SNMP et les fonctions get_request et/ou
get_bulk_request.
Tout fonctionnais pour le mieux (affichage du debug du prg):
indice <94>, oid <.1.3.6.1.2.1.4.22.1.2.94.172.20.74.74>, machine
<172.20.74.74>, val <0x0060b0acbd5c>
que l'on peut vérifier avec snmpget :
IP-MIB::ipNetToMediaPhysAddress.94.172.20.74.74 = STRING: 0:60:b0:ac:bd:5c
jusqu'a ce que je tombe sur l'erreur suivante :
indice <94>, oid <.1.3.6.1.2.1.4.22.1.2.94.172.20.74.75>, machine
<172.20.74.75>, val <ON >
IP-MIB::ipNetToMediaPhysAddress.94.172.20.74.75 = STRING: 0:4f:4e:d:24:3d
Après avoir cherché, il semble que si l'adresse MAC contient les valeurs
"4f4e" ou "4548" la fonction "$session1->var_bind_list->{$oid}" retourne un
STRING au lieu de la valeur hexadécimal. Il interprete le "4f4e" comme
"ON" (et 4548 comme EH) et la suite comme des caractères imprimable au lieu
de dire toute cette d'octets est de l'hexa et donc je retourne la chaine
0x..4f4e.. (ou 0x ...4548...).
tout traitement sur "$session1->var_bind_list->{$oid}" ne fonctionne pas
(sprintf, pack/unpack)....
J'ai voulu essayé le module SNMP, mais celui-ci plante "Can't use string
("SNMP") as a HASH ref while "strict refs" in use
at /usr/lib/perl5/5.8.5/ExtUtils/MM_Unix.pm line 503." pendant le test du
module.
Bref, si vous aviez des éléments a me fournir je suis preneur...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques Caron
Salut,
On Thu, 09 Jun 2005 10:51:54 +0200, marc wrote:
Après avoir cherché, il semble que si l'adresse MAC contient les valeurs "4f4e" ou "4548" la fonction "$session1->var_bind_list->{$oid}" retourne un STRING au lieu de la valeur hexadécimal. Il interprete le "4f4e" comme "ON" (et 4548 comme EH) et la suite comme des caractères imprimable au lieu de dire toute cette d'octets est de l'hexa et donc je retourne la chaine 0x..4f4e.. (ou 0x ...4548...).
C'est plus large que ça: il essaie toujours d'interpréter comme du texte, sauf si ça n'y ressemble vraiment pas. Mais certains caractères qui ne sont pas vraiment du texte sont considérés comme tels, en particulier 0x00:
OCTET STRINGs and Opaques containing non-printable ASCII characters are converted into a hexadecimal representation prefixed with "0x". B<NOTE:> The following ASCII control characters are considered to be printable by the module: NUL(0x00), HT(0x09), LF(0x0A), FF(0x0C), and CR(0x0D).
Bref, dans ton exemple, 0:60:b0:ac:bd:5c contient tout plein de caractères qui ne lui plaisent pas (>127 je suppose), alors que 0:4f:4e:d:24:3d, lui, ne contient que du pur ASCII, un NUL et un CR, qui sont considérés comme du texte.
Il semblerait qu'il soit possible de modifier ce comportement, voir la section sur translate dans man Net::SNMP.
tout traitement sur "$session1->var_bind_list->{$oid}" ne fonctionne pas (sprintf, pack/unpack)....
Ca ça m'étonne un peu... Même pas un petit join ":",map {sprintf "%02x",$_} unpack "C*",$valeur?
Jacques.
Salut,
On Thu, 09 Jun 2005 10:51:54 +0200, marc <pouah@verisign.com> wrote:
Après avoir cherché, il semble que si l'adresse MAC contient les valeurs
"4f4e" ou "4548" la fonction "$session1->var_bind_list->{$oid}" retourne
un STRING au lieu de la valeur hexadécimal. Il interprete le "4f4e" comme
"ON" (et 4548 comme EH) et la suite comme des caractères imprimable au
lieu de dire toute cette d'octets est de l'hexa et donc je retourne la
chaine
0x..4f4e.. (ou 0x ...4548...).
C'est plus large que ça: il essaie toujours d'interpréter comme du texte,
sauf si ça n'y ressemble vraiment pas. Mais certains caractères qui ne
sont pas vraiment du texte sont considérés comme tels, en particulier 0x00:
OCTET STRINGs and Opaques containing non-printable ASCII characters are
converted into a hexadecimal representation prefixed with "0x". B<NOTE:>
The following ASCII control characters are considered to be printable by
the module: NUL(0x00), HT(0x09), LF(0x0A), FF(0x0C), and CR(0x0D).
Bref, dans ton exemple, 0:60:b0:ac:bd:5c contient tout plein de caractères
qui ne lui plaisent pas (>127 je suppose), alors que 0:4f:4e:d:24:3d, lui,
ne contient que du pur ASCII, un NUL et un CR, qui sont considérés comme
du texte.
Il semblerait qu'il soit possible de modifier ce comportement, voir la
section sur translate dans man Net::SNMP.
tout traitement sur "$session1->var_bind_list->{$oid}" ne fonctionne pas
(sprintf, pack/unpack)....
Ca ça m'étonne un peu... Même pas un petit join ":",map {sprintf
"%02x",$_} unpack "C*",$valeur?
Après avoir cherché, il semble que si l'adresse MAC contient les valeurs "4f4e" ou "4548" la fonction "$session1->var_bind_list->{$oid}" retourne un STRING au lieu de la valeur hexadécimal. Il interprete le "4f4e" comme "ON" (et 4548 comme EH) et la suite comme des caractères imprimable au lieu de dire toute cette d'octets est de l'hexa et donc je retourne la chaine 0x..4f4e.. (ou 0x ...4548...).
C'est plus large que ça: il essaie toujours d'interpréter comme du texte, sauf si ça n'y ressemble vraiment pas. Mais certains caractères qui ne sont pas vraiment du texte sont considérés comme tels, en particulier 0x00:
OCTET STRINGs and Opaques containing non-printable ASCII characters are converted into a hexadecimal representation prefixed with "0x". B<NOTE:> The following ASCII control characters are considered to be printable by the module: NUL(0x00), HT(0x09), LF(0x0A), FF(0x0C), and CR(0x0D).
Bref, dans ton exemple, 0:60:b0:ac:bd:5c contient tout plein de caractères qui ne lui plaisent pas (>127 je suppose), alors que 0:4f:4e:d:24:3d, lui, ne contient que du pur ASCII, un NUL et un CR, qui sont considérés comme du texte.
Il semblerait qu'il soit possible de modifier ce comportement, voir la section sur translate dans man Net::SNMP.
tout traitement sur "$session1->var_bind_list->{$oid}" ne fonctionne pas (sprintf, pack/unpack)....
Ca ça m'étonne un peu... Même pas un petit join ":",map {sprintf "%02x",$_} unpack "C*",$valeur?