Bonjour,
je voudrai envoyer des traps snmp à partir d'un script Perl. Pour cela, je me suis tourné vers la librairie Net::SNMP (documentation).
J'ai tout d'abord créer un utilisateur (dans /etc/snmp/snmptrapd.conf) sur le serveur qui doit recevoir les traps :
Code :
- createUser -e 0x0102030405 myuser SHA mypassword AES myotherpassword
|
Ensuite, je me suis attaqué au script à proprement parlé et j'ai déjà un souci avec l'ouverture d'une session
Voici le code :
Code :
- #!/usr/bin/perl
- use SNMP;
- use Class::Struct;
- use Net::SNMP;
- my $NMS = "192.168.0.153";
- ($session, $error) = Net::SNMP->session(
- -hostname => $NMS,
- -port => '162',
- -version => 'snmpv3',
- -username => 'myuser',
- -authprotocol => 'sha',
- -authpassword => 'mypassword',
- -privprotocol => 'aes',
- -privpassword => 'myotherpassword');
|
A l'exécution de ce bou de script, j'ai l'erreur suivant :
Received usmStatsUnknownUserNames.0 Report-PDU with value 1 during synchronization |
Apparemment l'utilisateur n'est pas reconnu... Ce qui est étrange car si j'utilise la commande Linux :
snmptrap -e 0x0102030405 -v 3 -u myuser -a SHA -A mypassword -x AES -X myotherpassword -l authPriv localhost 40 1.3.6.1.4.1.32569.1.2.2.1.6.1 |
sa marche !!!
Autre chose que j'ai remarqué : un tcpdump sur le port 162 révèle les échanges suivant :
10:42:33.129365 IP 192.168.0.153.41858 > 192.168.0.153.162: F=r U= E= C= GetRequest(13) [|snmp]
10:42:33.129654 IP 192.168.0.153.162 > 192.168.0.153.41858: F= U= [|snmp][|snmp]
10:42:33.133520 IP 192.168.0.153.41858 > 192.168.0.153.162: F=apr U=myuse [|snmp][|snmp]
10:42:33.133936 IP 192.168.0.153.162 > 192.168.0.153.41858: F= U=myu [|snmp][|snmp] |
Pourquoi y a-t-il un double envoie de message de type "inform" ?!?
En bref, je ne sais pas trop comment m'en sortir donc si une bonne âme peut m'aiguiller
Merci