Bonjour !
Lors d'un inventaire SNMP d'une imprimante HP, j'ai observé des problèmes d'encodage des valeurs issues des intérogations SNMP dans le fichier XML envoyé au serveur ( formatage des réponses au format octetstring dans les balises XML ) et retour d'un code 500 du serveur OCS
Mon serveur ( V2.8 sur Centos 7.8 2003 ) est configuré avec le modèle d'équipement SNMP suivant :
label + OID suivant :
Imprimante HP | Description | 1.3.6.1.2.1.1.1.0 | | |
Imprimante HP | uptime | 1.3.6.1.2.1.1.3.0 | | |
Imprimante HP | Model Name | 1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.1.0 | | |
Imprimante HP | Serial Number | 1.3.6.1.4.1.11.2.3.9.4.2.1.1.3.3.0 | Yes |
Les traces ci-dessous sont issues des logs d'un agent ocs inventory V2.8 sur une Centos 7.8 2003 , version de perl v5.16.3
La MiB HP (HP-LASERJET-COMMON-MIB.mib) est bien dans le répertoire "/usr/share/snmp/mibs", les droits d'accès sont OK ( similaire au autre mibs )
On peut voir que les balises XML "Model Name" et "Serial Number" sont au format OctetString et donc probablement dans un format inattendu pour le parser XML du Server OCS.
On peut observer à la fin des log que le serveur OCS renvoie un code "500 Internal Server Error"
Les logs :
[Fri Nov 13 22:45:38 2020][debug] sending: <?xml version="1.0" encoding="UTF-8"?>
<REQUEST>
<CONTENT>
<snmp_imprimante_hp>
<Description>HP ETHERNET MULTI-ENVIRONMENT,SN:VNC3S88888,FN:8G44X2Z,SVCID:30157,PID:HP LaserJet MFP M28w</Description>
<Model Name>01:15:57:32:47:35:35:41</Model Name>
<Serial Number>01:15:56:4E:43:33:53:38:38:38:38:38</Serial Number>
<uptime>8 days, 03:58:42.74</uptime>
</snmp_imprimante_hp>
</CONTENT>
<DEVICEID>agentocs-2020-11-13-18-50-24</DEVICEID>
<QUERY>SNMP</QUERY>
</REQUEST>
[Fri Nov 13 22:45:38 2020][error] Cannot establish communication : 500 Internal Server Error
[Fri Nov 13 22:45:38 2020][debug] [snmpscan] End snmp_end_handler :)
Proposition de modification du code des modules Perl SnmpScan.pm et Snmp.pm
j'ai testé une modification du code perl de la configuration du paramètre "-translate" de l'objet Net::SNMP avec la configuration suivante dans les modules SnmpScan.pm et Snmp.pm. Le paramètre "translate" force la conversion du format "octetstring" vers des caractères lisibles.
-translate => [-nosuchinstance => 0, -nosuchobject => 0, -octetstring => 0]
code d'origine :
-translate => [-nosuchinstance => 0, -nosuchobject => 0, ]
voici un exemple :
# We have an older version v2c ou v1
($session, $error) = Net::SNMP->session(
-retries => 1 ,
-timeout => 3,
-version => 'snmpv'.$comm->{VERSION},
-hostname => $device->{IPADDR},
-community => $comm->{NAME},
-translate => [-nosuchinstance => 0, -nosuchobject => 0, -octetstring => 0],
j'ai réalise les modifications 2 fois ( fonction snmp V1/V2 et snmp V3 ) dans les modules SnmpScan.pm et Snmp.pm
Après la modification ,le résultats est le suivant dans le fichier de log :
le formatage des réponses SNMP dans les balises XML est correcte ...Toutefois, la réponse du serveur est toujours "Cannot establish communication : 500 Internal Server"
<REQUEST>
<CONTENT>
<snmp_imprimante_hp>
<Description>HP ETHERNET MULTI-ENVIRONMENT,SN:VNC3S88888,FN:8G44X2Z,SVCID:30157,PID:HP LaserJet MFP M28w</Description>
<Model Name>W2G55A</Model Name>
<Serial Number>VNC3S88888</Serial Number>
<uptime>8 days, 06:06:36.83</uptime>
</snmp_imprimante_hp>
</CONTENT>
<DEVICEID>agentocs-2020-11-13-18-50-24</DEVICEID>
<QUERY>SNMP</QUERY>
</REQUEST>
[Sat Nov 14 00:53:33 2020][error] Cannot establish communication : 500 Internal Server Error
[Sat Nov 14 00:53:33 2020][debug] [snmpscan] End snmp_end_handler :
Les logs sur le serveur OCS
[Sat Nov 14 00:53:33.029221 2020] [perl:error] [pid 1837] [client 192.168.0.26:44192] \nnot well-formed (invalid token) at line 6, column 17, byte 228 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.\n
Pouvez-vous regarder le problème d'encodage des réponses SNMP dans le fichier XML du client OCS et l'erreur 500 du serveur, et peut être aussi ma proposition de modification du code !
Cordialement !