Je voudrais faire ce qui suit, mais je ne suis pas sûr d'utiliser la meilleure méthode:Comment mon script Perl peut-il recevoir les interruptions SNMP d'un système géré?
Un script Perl, s'exécutant sur une machine Sparc/Solaris 10, doit attendre les paquets d'interruption SNMP entrants port 162 par exemple). Quand il reçoit un piège, il doit le décoder et y faire un traitement, puis reprendre l'attente du prochain trap. J'ai examiné Net :: SNMP par David M. Town, mais je pense que cela permet seulement d'envoyer des requêtes et de recevoir des réponses. Je ne peux pas trouver une méthode pour attendre les messages d'interruption spontanée dans cette documentation: http://search.cpan.org/dist/Net-SNMP/lib/Net/SNMP.pm
Le package Net-SNMP, d'autre part, apparaît comme une bibliothèque très robuste et bien utilisé, mais même dans la documentation ne me donne pas un chemin clair. SNMP :: TrapSession me permet d'envoyer des traps, mais pas de les recevoir (?). Un peu de googling m'amène à suggérer que je devrais utiliser le binaire "snmptrapd" et utiliser les fonctions perl intégrées, pour appeler mon script quand snmptrapd reçoit un message. Cela pourrait fonctionner, mais ne serait pas pratique puisque l'option perl embarquée nécessite un binaire perl compilé sans support de fichiers volumineux. Je ne possède pas le système cible et je ne peux donc pas remplacer le compilateur/interpréteur. Je pourrais expédier mon logiciel avec un perl spécialement compilé, mais cela me donnerait des problèmes multiplateformes que j'espérais éviter. La raison pour laquelle j'utilise Perl et non Java avec SNMP4J ou similaire, c'est que j'ai un code Perl hérité qui dépendait auparavant de l'API Perl de HP NNM, et je dois passer à un back-end logiciel libre pour éliminer le coût de la licence.
Après en e-mail à la liste-snmp-utilisateurs nets de diffusion, je l'ai appris que cette fonction En fait, il n'existe pas dans l'API Perl de net-snmp. La recommandation que j'ai eue était d'utiliser le programme snmptrapd fourni et de faire en sorte que mon script analyse sa sortie de texte. Cela fonctionnerait sûrement, mais je préférerais avoir accès aux données brutes de BER et je ne suis pas désireux de prendre le coup de performance possible des données de texte d'analyse. Très probablement, je vais aller avec l'option Snmp4j - un changement de langue pourrait ne pas être un gros problème. – Jolta
Dans le cas où quelqu'un est intéressé, j'ai fini par aller sur la route de Java. Une configuration simple à 2 fils fonctionne très bien: le producteur écoute les pièges entrants via Snmp4j et les place dans une file d'attente. Le consommateur (dans un fil séparé) lit la file d'attente sur une base FIFO et effectue le traitement. Je suis capable de presser à peu près 400 pièges par seconde sans perdre quoi que ce soit du côté du réseau. En revanche, je ne peux pas obtenir snmptrapd (net-snmp) pour accepter plus de 10-50 pièges par seconde, ce qui est un dealbreaker dans mon cas. – Jolta