You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2016-03-31 15:18:30

kevinG
Member
From: Paris
Registered: 2014-02-26
Posts: 423

Probleme règles imprimantes suite inventaire SNMP et mib

Bonjour,

Nous avons un parc d'imprimante composé uniquement de Lexmark et de Konica.

Lorsque je fais un inventaire réseau tout se passe, il détecte bien les imprimantes sur ma plage IP.

Le problème se pose avec les lexmark. Il va récupérer le numéro de série que l'on trouve dans le MIB : 1.3.6.1.2.1.43.5.1.1.17.1. Ce qui donne le numéro de série du type : XXXXX-100-0

Or le numéro de série réel est XXXXX. Donc toutes les régles sur les numéros de série pour les imprimantes ne fonctionne pas.

Après un test avec la commande snmpwalk, je trouve bien le numéro de série XXXXX mais avec le MIB :
1.3.6.1.4.1.641.2.1.2.1.6.1

Avec la version de GLPI 0.90, FI 0.90+1.1 et l'agent d'inventaire 2.3.17, que faut-il modifier afin que l'inventaire SNMP retourne le bon numéro de série ?
Vu que l'on ne met plus de modèle SNMP comme dans la version 0.84 et avec l'agent 2.3.13

Ou existe-t-il déjà un correctif ?

Cordialement.


Version en production GLPI 9.4.5 - Agent FI 2.5
Version en production Fusion Inventory 9.4+2.4
Version PHP 7.2.16
Zend Engine v3.2.0 - Zend OPcache v7.2.16

Offline

#2 2016-04-08 15:14:53

kevinG
Member
From: Paris
Registered: 2014-02-26
Posts: 423

Re: Probleme règles imprimantes suite inventaire SNMP et mib

En cherchant, j'ai trouvé dans l'agent d'inventaire, dans le répertoire suivant :
FusionInventory-Agent\perl\agent\FusionInventory\Agent\Tools

J'ai fait mes tests avec l'agent 2.3.17 installé sur mon poste en windows 7

Dans le fichier "Hardware.pm", j'ai vu qu'il y a plein de MIB dedans et j'ai trouvé la fonction qui va cherché le numéro de série, du moins je pense.

sub _getSerial {
    my ($snmp, $type) = @_;

    # Entity-MIB::entPhysicalSerialNum
    my $entPhysicalSerialNum = $snmp->get_first('.1.3.6.1.2.1.47.1.1.1.1.11');
    return _getCanonicalSerialNumber($entPhysicalSerialNum)
        if $entPhysicalSerialNum;

    # Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get_first('.1.3.6.1.2.1.43.5.1.1.17');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;

    # vendor specific OIDs
    my @oids = (
        '.1.3.6.1.4.1.2636.3.1.3.0',             # Juniper-MIB
        '.1.3.6.1.4.1.248.14.1.1.9.1.10.1',      # Hirschman MIB
        '.1.3.6.1.4.1.253.8.53.3.2.1.3.1',       # Xerox-MIB
        '.1.3.6.1.4.1.367.3.2.1.2.1.4.0',        # Ricoh-MIB
        '.1.3.6.1.4.1.641.2.1.2.1.6.1',          # Lexmark-MIB
        '.1.3.6.1.4.1.1602.1.2.1.4.0',           # Canon-MIB
        '.1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.1.0', # Brother-MIB
        '.1.3.6.1.4.1.318.1.1.4.1.5.0',          # MasterSwitch-MIB
        '.1.3.6.1.4.1.6027.3.8.1.1.5.0',         # F10-C-SERIES-CHASSIS-MIB
        '.1.3.6.1.4.1.6027.3.10.1.2.2.1.12.1',   # FORCE10-SMI
    );
    foreach my $oid (@oids) {
        my $value = $snmp->get($oid);
        next unless $value;
        return _getCanonicalSerialNumber($value);
    }

   return;
}

J'ai essayé d'inverser la mib de Lexmark avec "1.3.6.1.2.1.43.5.1.1.17", cela donne :

# Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get_first('.1.3.6.1.4.1.641.2.1.2.1.6');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;

J'ai essayé aussi :

# Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get_first('.1.3.6.1.4.1.641.2.1.2.1.6.1');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;

# Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get('.1.3.6.1.4.1.641.2.1.2.1.6');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;

# Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get('.1.3.6.1.4.1.641.2.1.2.1.6.1');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;

Je pensais que s'il rencontrait la bonne mib en premier ca le ferait sortir de la fonction vu la condition "if" sur le "return" mais il n'a pas l'air de retourné une valeur.

Ou alors il y a d'autres modifications à faire.

J'ai remarqué ce problème depuis l'agent 2.3.13.
Avec la version 0.84 de GLPI + version 0.84+3.5 pour FI j'utilisais l'agent 2.2.7-3 qui ne posait pas de problème grâce au modèle snmp tout en étant compatible.

Malheureusement ce dernier agent avait besoin d'un modèle SNMP, chose qui n'existe plus dans la version 0.90.

Je veux bien me plonger dans le code pour essayé de voir d'où vient le problème ou au moins aider, mais pourriez-vous m'aiguiller sur les pages à regarder ?


Version en production GLPI 9.4.5 - Agent FI 2.5
Version en production Fusion Inventory 9.4+2.4
Version PHP 7.2.16
Zend Engine v3.2.0 - Zend OPcache v7.2.16

Offline

#3 2016-08-29 09:49:39

hschillinger
Member
Registered: 2016-08-29
Posts: 1

Re: Probleme règles imprimantes suite inventaire SNMP et mib

Bonjour,

Ayant le même problème concernant les Lexmark, j'ai modifié le ficher hardware.pm de la manière suivante :

sub _getSerial {
    my ($snmp, $type) = @_;

    # Entity-MIB::entPhysicalSerialNum
    my $entPhysicalSerialNum = $snmp->get_first('.1.3.6.1.2.1.47.1.1.1.1.11');
    return _getCanonicalSerialNumber($entPhysicalSerialNum)
        if $entPhysicalSerialNum;
   
   

    # vendor specific OIDs
    my @oids = (
        '.1.3.6.1.4.1.2636.3.1.3.0',             # Juniper-MIB
        '.1.3.6.1.4.1.248.14.1.1.9.1.10.1',      # Hirschman MIB
        '.1.3.6.1.4.1.253.8.53.3.2.1.3.1',       # Xerox-MIB
        '.1.3.6.1.4.1.367.3.2.1.2.1.4.0',        # Ricoh-MIB
        '.1.3.6.1.4.1.641.2.1.2.1.6.1',          # Lexmark-MIB
        '.1.3.6.1.4.1.1602.1.2.1.4.0',           # Canon-MIB
        '.1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.1.0', # Brother-MIB
        '.1.3.6.1.4.1.318.1.1.4.1.5.0',          # MasterSwitch-MIB
        '.1.3.6.1.4.1.6027.3.8.1.1.5.0',         # F10-C-SERIES-CHASSIS-MIB
        '.1.3.6.1.4.1.6027.3.10.1.2.2.1.12.1',   # FORCE10-SMI
    );
    foreach my $oid (@oids) {
        my $value = $snmp->get($oid);
        next unless $value;
        return _getCanonicalSerialNumber($value);
    }

    # Printer-MIB::prtGeneralSerialNumber
    my $prtGeneralSerialNumber = $snmp->get_first('.1.3.6.1.2.1.43.5.1.1.17');
    return _getCanonicalSerialNumber($prtGeneralSerialNumber)
        if $prtGeneralSerialNumber;
   
    return;
}

Je pense que c'est une manière de faire sans trop ce compliquer la tête.

Bonne journée.

Offline

Board footer

Powered by FluxBB