Bonjour !
Lors d'un inventaire SNMP d'une imprimante HP, j'ai observé des problèmes d'encodage des réponses 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 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 le format attendu
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
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
-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 !