[perl] envoie de trap SNMPv3

envoie de trap SNMPv3 [perl] - Perl - Programmation

Marsh Posté le 11-06-2010 à 10:43:20    

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 :
  1. 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  :cry:  
Voici le code :

Code :
  1. #!/usr/bin/perl
  2. use SNMP;
  3. use Class::Struct;
  4. use Net::SNMP;
  5. my $NMS = "192.168.0.153";
  6. ($session, $error) = Net::SNMP->session(
  7. -hostname => $NMS,
  8. -port => '162',
  9. -version => 'snmpv3',
  10. -username => 'myuser',
  11. -authprotocol => 'sha',
  12. -authpassword => 'mypassword',
  13. -privprotocol => 'aes',
  14. -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

Reply

Marsh Posté le 11-06-2010 à 10:43:20   

Reply

Marsh Posté le 11-06-2010 à 12:23:21    

La c'est un poil trop pointu pour que je réponde (apparemment, ça a pas l'air mal, ce que tu fais).
Je lis dans la doc:

Citation :

In order to support the AES Cipher Algorithm as a SNMPv3 privacy protocol, the non-core module Crypt::Rijndael is needed.


Il est bien installé, ce module?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-06-2010 à 15:56:43    

yep, je travaille sous Debian et j'ai installé (en plus des lib snmp) :
libcrypt-des-perl libdigest-sha1-perl libdigest-hmac-perl libcrypt-rijndael-perl

Reply

Marsh Posté le 15-06-2010 à 17:37:45    

Tout d'abord, d'après la doc de la lib Net::SNMP, l'envoie de trap en v3 n'est pas possible. Il est obligatoire de passer par des informs (traps avec ack).
Du coup, j'ai reconfigurer snmptrapd avec :

Code :
  1. createUser myuser SHA mypassword AES myotherpassword


on peut remarquer qu'il n'y a plus de EngineID. En effet, les messages inform utilisent l'engineID du serveur.
Ceci implique que la commande :

snmpinform -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


enverra 2 informs au serveur :

  • le premier pour récupérer l'engineID
  • le second pour envoyer réellement l'info souhaité

Du coup, maintenant, l'ouverture de session réussi  :)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed