LoriotPro NMS software Network Management Software
Newsletter | Contact | Nouvelles | Télécharger | Support | Partenaires
version française

Utilisation du Simulateur d’agent SNMP - SNMPSIM

Sommaire

Introduction

Installation

Etape de génération d’adresses IP sur une Interface réseau du Windows

Création des répertoires contenant les fichiers d’OID/valeurs

Simulateur SNMP

Génération d'image SNMP snapshots à partir d'un équipement réel

Génération de captures  (images) à partir de fichier MIB

Simulation d'agent SNMP

Amélioration de la Performance

Obtenir de l'aide

Feedback

Introduction

L’objectif de cet HowTo est de documenter les étapes nécessaires pour mettre en place un environnement de simulation de plusieurs HOST IP avec le support d’agent SNMP simulés.

Le logiciel de simulation d’agent SNMP Ilya Etingof de http://snmpsim.sourceforge.net/ est utilisé dans ce but.

L’ensemble des host/agentSNMP simulés étant hébergé sur un seul et unique système Windows. Le système est accessible par n adresses IP attachées à la même carte réseau.

Installation des packages

Les package suivant sont nécessaire pour la mise en œuvre du simulateur sur Windows.

  • python-3.2.2.msi  (Interpréteur PYTHON)
  • pyasn1-0.1.2.tar.gz (Bibliothèque supplémentaire pour ASN1)
  • pysnmp-4.2.2.tar.gz (Bibliothèque supplémentaire pour SNMP)
  • snmpsim-0.1.4.tar.gz (Simulateur d’agent SNMP)

Installer l’interpréteur PYTHON en premier (ici sous Windows)

Se placer ensuite dans les répertoires respectif des package désarchivés puis lancer la commande « setup.py install » dans une fenêtre de commande (CMD) en ligne Windows.

Cette command à pour rôle de copier les librairies dans le répertoire d’installation de PYTHON

Pour la communication sécurisé SNMPv3, pycrypto doit également être installé.

Etape de génération d’adresses IP sur une Interface réseau du Windows

L’objectif est ici d’ajouter des adresses à l’interface réseau du système de façon à pouvoir binder les agents sur celle-ci. Chaque instance de simulateur d'agent SNMP devra venir s'attacher "binder" sur une adresse et une seule. Nous utilisons la commande netsh de Windows pour ajouter avec un script Power Shell les adresses d’une plage donnée. Le script powershell  « AddIPRange192.168.ps1 » ajoute n addresses (ici 5 dans la boucle for) à l’interface  identifié par $InterfaceName.

 

$InterfaceName = "LAN 10.1.0.0"
$NetworkBase = "192.168.1."
foreach ($number in 1..5)

{
$address = $NetworkBase + $number
netsh interface ip add address name=$InterfaceName addr=$address mask=255.255.255.255
}

Pour éviter les conflits avec des adresses réseaux nous utiliserons les adresses 192.168.xxx.xxx

Il faut lancer le power shell en mode  « runs as » administrator

Si les scripts powershell ne sont pas autorisés il faut passer la commande

set-ExecutionPolicy  RemoteSigned

Ou dans la registry sur la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell assigner RemoteSigned

Ouvrir ensuite une instance de  powershell

Pour Lancer le programme à partir du répertoire courant il faut y ajouter .\ devant

Exemple ici : .\ AddIPRange192.168

Ensuite un ipconfig permet de vérifier, exemple ci-dessous avec 5 adresses

Création des répertoires contenant les fichiers d’OID/valeurs

Au lancement d’une instance du simulateur d'agent SNMP un répertoire précis pour chaque machine est spécifié. Ce répertoire contient un fichier associant des OID et des valeurs. Celui-ci sera utilisé par le simulateur pour répondre sur les objets demandés avec les valeurs associées.

Dans le répertoire de simulation « \Python SNMP Simulator » on crée une structure pour chaque host/agent à simuler :

/devices/Luteus/192.168.0.1/

/devices/Luteus/192.168.0.2/

/devices/Luteus/192.168.0.3/

….

Pour chaque instance d’agent et adresse IP créé précédemment il doit exiter un répertoire avec comme nom l’adresse IP

Dans chaque répertoire on dépose le fichier de type snmprec (généré avec  snmprec.py qui fait un snapshot d’un équipement).

Exemple d’extrait de snaptshot :

1.3.6.1.2.1.1.1.0|4|47455342432d393236305
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.34547
1.3.6.1.2.1.1.3.0|67|78171676
1.3.6.1.2.1.1.4.0|4|contact
1.3.6.1.2.1.1.5.0|4|0006178
1.3.6.1.2.1.1.6.0|4|Paris
1.3.6.1.2.1.1.7.0|2|72

Pour avoir une création rapide et personnalisé des fichiers on utilise un script LUA.

GenerateSimDirectories.LUA  (Génère des rec OID/value de type Luteus)

Ce script crée automatiquement les répertoire et y ajoute une version personnalisé du fichier de capture OID/value (ici d’un équipement Luteus ).

Pour l’instant la personnalisation consiste à change le sysname ne DEVICE-ipaddress

Avec ipaddress l’adresse du device concerné.

Les fichiers sont nommés comme on le souhaite mais le nom devient la communauté snmp à utiliser sur le manager (LoriotPro)

Par exemple public.snmprec  aura pour communauté public au chargement.

Le script LUA génère des fichiers avec le format public.snmprec.

Nous pouvons lancer à partir de maintenant une instance de agent snmp simulé sur par exemple l’adresse 192.168.1.1.

La commande est la suivante

H:\Python\python.exe H:\Python\Scripts\snmpsimd.py --device-dir="./devices/Luteus/192.168.1.1/" --agent-port=1161 --agent-address=192.168.1.1

Le port peut être 161si aucun agent n’est déjà présent sur le système WIndows. Vérifier que le service SNMP de Windows est bien arrêté. Attention si un agent SNMP est actif sur le system toutes nouvelles adresses créées lui est automatiquement attachées "bind". Il est alors impossible d'attacher l'agent(s) simulé(s) sur le port par défaut 161 à cette(s) adresse(s).

On peut vérifier avec SNMP Advanced Query de LoriotPro que la requête sur l’adresse IP 192.168.1.1 avec la communauté snmp « public » réponde bien.

Si tout fonctionne pour un système il est alors intéressant de lancer la simulation de n systèmes.

Fichier de lancement de plusieurs instances de simulator sur plusieurs IP

RunMultiSim.ps1

C’est un script powershell qui utilise la commande start-process pour lancer les n instance souhaitées.

La boucle foreach va démarrer une instance pour les host de 192.168.1.1 à .10 dans notre exemple

$NetworkBase = "192.168.1."
$NbInstance = 10
foreach ($number in 1..$NbInstance)
{
$address = $NetworkBase + $number
$argument = 'H:\Python\Scripts\snmpsimd.py '
$argument += '--device-dir="./devices/Luteus/'
$argument +=  $address
$argument += '/" '
$argument += '--agent-port=1161 '
$argument += '--agent-address=' + $address
#$argument += ' --validate-device-data'
start-process H:\Python\python.exe -argument $argument -wait
}

Le lancement du script dans le powershell

Un fenêtre windows doit s’ouvrir pour chaque instance de simulateur lancé.

Simulateur d’agent SNMP V1,V2c,V3

Ce logiciel est destiné à tester les NMS (Manager SNMP) tel que LoriotPro  avec des agents SNMP simulés qui pourraient représenter une infrastructure réseau potentiellement important et peuplée de différents types d’équipements SNMP.

Nous allons utiliser pour cela le programme décrit ci-après qui simule le comportement d’un agent SNMP. Pour rappel un agent SNMP est un serveur en écoute sur un port UDP (161 par défaut) qui répond aux requêtes envoyées par le manager SNMP.  Les requêtes contiennent un ou plusieurs objets se présentant sous la forme d’OID. A chaque objet est associée une valeur. Un agent répond généralement à plusieurs OID différents définis dans les fichiers de MIB.

Le cas d'utilisation typique de ce logiciel commence par l'enregistrement d'une « image »  des objets SNMP d’un agent sur un équipement réellement existant et accessible dans votre réseau  à l'aide de l’outil "snmprec". Une autre option est de générer des « images » directement à partir de fichiers MIB avec l’outil "mib2dev". Ce dernier est incontournable lorsque vous ne possédez pas d’équipement  physique pour créer l’image. Avec une ou des images il est ensuite possible de lancer le simulateur afin qu'il puisse répondre aux requêtes SNMP de la même manière que le ferait l’équipement réel.

Techniquement, le simulateur SNMP est un agent SNMP multi-contexte. Cela signifie qu'il gère plusieurs ensembles d’objets à la fois (plusieurs équipements sont simulés sur la même adresse IP par défaut).

Remarque : Comme nous l’avons indiqué au début il est possible de simulé plusieurs équipements sur des adresses distinctes en utilisant l’astuce décrite dans ce document (Plusieurs adresse IP sur la même carte et plusieurs instances du programme lancées).

Chaque dispositif est simulé dans un contexte dédié SNMP. Un manager SNMPv3 comme LoriotPro  doit préciser le nom du contexte SNMP dans les requêtes, tandis qu’un manager SNMPv1/v2c peut utiliser le nom spécifique de communauté SNMP (logiquement liée au contexte SNMP) pour accéder à un  ensemble particulier de d’objets SNMP.

Le produit de simulation a été écrit par  Ilya Etingof, 2010-2012 et est disponible sur sourceforge  - http://sourceforge.net/projects/snmpsim/

Génération de captures  (images) sur des équipements SNMP réels

La principale méthode de l'enregistrement d'une image SNMP est d'exécuter l'outil snmprec en spécifiant un équipement SNMP de votre réseau. snmprec va exécuter une série de requêtes SNMP pour GETNEXT sur une fourchette spécifique d’objets SNMP (OID)  avec une version de protocole SNMP choisie. Les valeurs lues sont enregistrées dans un fichier texte (fichier de périphérique AKA).

Le format des fichiers d’image est optimisé pour être compact, lisible facile à analyser. Il est également important pour stocker des informations de réponse complète et exacte dans une forme la plus fiable. Voici un extrait de fichier image d’un équipement SNMP:

1.3.6.1.2.1.1.1.0|4|Linux 2.6.25.5-smp SMP Tue Jun 19 14:58:11 CDT 2007 i686
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10
1.3.6.1.2.1.1.3.0|67|233425120
1.3.6.1.2.1.2.2.1.6.2|4x|00127962f940
1.3.6.1.2.1.4.22.1.3.2.192.21.54.7|64x|c3dafe61

Le fichier est constitué de ligne constitué de trois valeurs OID|Tag|Valeur séparés par des | :

  • OID est un ensemble de points séparés par des nombres.
  • Tag est un codée en BER ASN.1 tag. Lorsque la valeur est hexified, un «x» littérale est annexée.
  • Valeur est soit une chaîne imprimable, un nombre ou une valeur hexifed.

Pour procéder à une cature la commande doit respecter la syntaxe ci-dessous:

$ snmprec.py  -h Usage: snmprec.py [--help] [--debug=] [--quiet] [--v1|2c|3] [--community=] [--v3-user=] [--v3-auth-key=] [--v3-priv-key=] [--v3-auth-proto=] [--v3-priv-proto=] [--context=] [--agent-address=] [--agent-port] [--start-oid=] [--stop-oid=] [--output-file=] $

$ snmprec.py --agent-address 127.0.0.1 --start-oid=1.3.6.1.2.1.2.1.0 --stop-oid=1.3.6.1.2.1.5 --output-file=devices/linux/1.3.6.1.2.1/127.0.0.1\@public.snmprec OIDs dumped: 304, elapsed: 1.94 sec, rate: 157.00 OIDs/sec

$ ls -l devices/linux/1.3.6.1.2.1/127.0.0.1\@public.snmprec -rw-r--r-- 1 ilya users 16252 Oct 26 14:49 devices/linux/1.3.6.1.2.1/127.0.0.1@public.snmprec
$
$ head devices/linux/1.3.6.1.2.1/127.0.0.1\@public.snmprec
1.3.6.1.2.1.2.2.1.1.1|2|1
1.3.6.1.2.1.2.2.1.1.2|2|2
1.3.6.1.2.1.2.2.1.2.1|4|lo
1.3.6.1.2.1.2.2.1.2.2|4|eth0
1.3.6.1.2.1.2.2.1.3.1|2|24
1.3.6.1.2.1.2.2.1.3.2|2|6
1.3.6.1.2.1.2.2.1.4.1|2|16436
1.3.6.1.2.1.2.2.1.4.2|2|1500
1.3.6.1.2.1.2.2.1.5.1|66|10000000
1.3.6.1.2.1.2.2.1.5.2|66|100000000

Il n'y a pas d'exigences particulières pour le nom de fichier image et pour son emplacement.

Notez que le Simulateur SNMP traite le chemin du fichier image comme une chaîne indiquant la communauté en SNMPv1/v2c et le nom de contexte en SNMPv3hachage MD5.

Génération de captures  (images) à partir de fichier MIB


Une autre façon de produire des fichiers images est de lancer l'outil mib2dev.py  sur un fichier de MIB. Avec cette méthode vous n'avez pas besoin d'avoir un équipement réel, les valeurs qui sont normalement retournés par un équipement de votre réseau, seront alors choisies au hasard mais en respectant le type SNMP.

Gardez à l'esprit que vous pouvez rencontrer deux problèmes avec ces valeurs choisies au hasard:

  1. Certaines valeurs choisies au hasard  seront incohérentes en rapport à l’objet SNMP. Par exemple, en langage naturel dans le champ Description. La procédure de génération automatique de valeurs n'a aucune chance d'assurer des corrélations appropriées, dans ce cas, l’image globale peut sembler incohérent.
  2. Certains types de données spécifiés dans la MIB peuvent imposer certaines restrictions sur les valeurs d'instance de type. Par exemple un objet entier typé peut être autorisés à être 0 ou 12. Si une valeur générée s'avère être 2, il sera incompatible avec ce type. Bien qu'il soit possible de générer une valeur conforme, l'outil mib2dev.py ne le fait pas [encore]. Une valeur non-conforme entraînera une exception sur l'instanciation du noeud MIB. Dans ce cas, le script mib2dev.py reviendra à un mode interactif et vous demandera une valeur conforme.

Sur le côté positif, l'outil mib2dev.py respecte le type d’objet par exemple le type associé avec les OID, et de produire des indices valables pour les tables MIB.
La génération de fichier de périphérique à partir d'un fichier de MIB devrait ressembler à ceci:

$ mib2dev.py Usage: mib2dev.py [--help] [--debug=] [--quiet] [--pysnmp-mib-dir=] [--mib-module=] [--start-oid=] [--stop-oid=] [--manual-values] [--output-file=] [--string-pool=] [--integer32-range=]

Notez que vous devez d'abord convertir un ASN.1 (par exemple le texte) dans un module MIB pysnmp (avec l'outil livré avec libsmi2pysnmp disitribution pysnmp). Supposant que nous ayons le module SI-MIB.py dans le chemin de recherche pysnmp, exécutez:

$ mib2dev.py --mib-module=IF-MIB # MIB module: IF-MIB 1.3.6.1.2.1.2.1.0|2|3 1.3.6.1.2.1.2.2.1.1.2|2|4 1.3.6.1.2.1.2.2.1.2.2|4|whisky au juge blond qui 1.3.6.1.2.1.2.2.1.3.2|2|4 1.3.6.1.2.1.2.2.1.4.2|2|3 1.3.6.1.2.1.2.2.1.5.2|66|1453149645 1.3.6.1.2.1.2.2.1.6.2|4|Portez ce vieux whisky 1.3.6.1.2.1.2.2.1.7.2|2|2 1.3.6.1.2.1.2.2.1.8.2|2|1 1.3.6.1.2.1.2.2.1.9.2|67|3622365885 1.3.6.1.2.1.2.2.1.10.2|65|1132976988 1.3.6.1.2.1.2.2.1.11.2|65|645067793 1.3.6.1.2.1.2.2.1.12.2|65|29258291 1.3.6.1.2.1.2.2.1.13.2|65|2267341229 1.3.6.1.2.1.2.2.1.14.2|65|3666596422 1.3.6.1.2.1.2.2.1.15.2|65|1846597313 1.3.6.1.2.1.2.2.1.16.2|65|1260601176 1.3.6.1.2.1.2.2.1.17.2|65|1631945174 1.3.6.1.2.1.2.2.1.18.2|65|499457590 1.3.6.1.2.1.2.2.1.19.2|65|278923014 1.3.6.1.2.1.2.2.1.20.2|65|3153307863 1.3.6.1.2.1.2.2.1.21.2|66|1395745280 1.3.6.1.2.1.2.2.1.22.2|6|1.3.6.1.3.99.148.60.97.205.134.179 # End of IF-MIB, 23 OID(s) dumped

Une des options utile est la chaîne  --string-pool  et - Integer32-ranges. Elles vous permettent de spécifier un autre ensemble de mots et de nombres entiers  pour la production des valeurs aléatoires.

Enfin, vous pouvez toujours modifier vos fichiers de périphériques avec un éditeur de texte.

Simulation d’agent SNMP

Votre collection de fichiers d’images ressemble par exemple à ceci:

$ find devices devices devices/linux devices/linux/1.3.6.1.2.1 devices/linux/1.3.6.1.2.1/127.0.0.1@public.snmprec devices/linux/1.3.6.1.2.1/127.0.0.1@public.dbm devices/3com devices/3com/switch8800 devices/3com/switch8800/1.3.6.1.4.1 devices/3com/switch8800/1.3.6.1.4.1/172.17.1.22@public.snmprec devices/3com/switch8800/1.3.6.1.4.1/172.17.1.22@public.dbm ...

Notez que lesfichiers dbm sont  des fichiers indexés par OID pour la recherche rapide. Ces index sont créés et mis à jour automatiquement par simulateur.

Pour obtenir de l’aide sur la syntaxe:

$ snmpsimd.py -h Usage: snmpsimd.py [--help] [--debug=] [--device-dir=] [--force-index-rebuild] [--validate-device-data] [--agent-address=] [--agent-port=] [--v2c-arch ] [--v3-user=] [--v3-auth-key=] [--v3-priv-key=] [--v3-priv-proto=]

Lancement du programme de simulation d’agent SNMP:

$ snmpsimd.py --agent-port=1161 Index ./devices/linux/1.3.6.1.2.1/127.0.0.1@public.dbm out of date Indexing device file ./devices/linux/1.3.6.1.2.1/127.0.0.1@public.snmprec...   ...303 entries indexed Device file ./devices/linux/1.3.6.1.2.1/127.0.0.1@public.snmprec, dbhash-indexed, closed SNMPv1/2c community name: @linux/1.3.6.1.2.1/127.0.0.1@public SNMPv3 context name: 6d42b10f70ddb49c6be1d27f5ce2239e

 

Device file ./devices/3com/switch8800/1.3.6.1.4.1/172.17.1.22@public.dump, dbhash-indexed, closed SNMPv1/2c community name: @3com/switch8800/1.3.6.1.4.1/172.17.1.22@public SNMPv3 context name: 1a80634d11a76ee4e29b46bc8085d871 

SNMPv3 credentials: Username: simulator Authentication key: auctoritas Encryption (privacy) key: privatus Encryption protocol: (1, 3, 6, 1, 6, 3, 10, 1, 2, 2) 

Listening at ('127.0.0.1', 1161) ...

Un port non privilégié est choisi dans cet exemple pour éviter de fonctionner en root.

A ce stade (état listening) en écoute,  vous pouvez interroger l’agent simulé avec LoriotPro et lancer des requêtes sur les périphériques simulés. .

Lors de la simulation d'une grande nombre d’équipement ou si votre simulateur fonctionne sur une machine distante, il est commode d'avoir un répertoire de tous les équipements simulés et  leur communauté / nom de contexte. Le simulateur conserve ces informations en interne, dans un contexte spécifique SNMP "index":

Exemple de walk sur LINUX : $ snmpwalk -On -v2c -c index localhost:1161 .1.3.6 .1.3.6.1.4.1.20408.999.1.1.1 = STRING: "./devices/linux/1.3.6.1.2.1.1.1/127.0.0.1@public.snmprec" .1.3.6.1.4.1.20408.999.1.2.1 = STRING: "devices/linux/1.3.6.1.2.1.1.1/127.0.0.1@public" .1.3.6.1.4.1.20408.999.1.3.1 = STRING: "9535d96c66759362b3521f4e273fc749"

ou

$ snmpwalk -O n -l authPriv -u simulator -A auctoritas -X privatus -n index loca lhost:1161 .1.3.6 .1.3.6.1.4.1.20408.999.1.1.1 = STRING: "./devices/linux/1.3.6.1.2.1.1.1/127.0.0.1@public.snmprec" .1.3.6.1.4.1.20408.999.1.2.1 = STRING: "devices/linux/1.3.6.1.2.1.1.1/127.0.0.1@public" .1.3.6.1.4.1.20408.999.1.3.1 = STRING: "9535d96c66759362b3521f4e273fc749"

Where first column holds device file path, second - community string, and third - SNMPv3 context name. >/p>

Amélioration de la Performance

The SNMPv3 architecture is inherently computationally heavy so Simulator is somewhat slow. It can run faster if it would use a much lighter and lower-level SNMPv2c architecture at the expense of not supporting v3 operations.

Use the --v2c-arch command line parameter to switch Simulator into SNMPv2c operation mode.

L'architecture SNMPv3 génère intrinsèquement des calculs conséquents et le  Simulator peut être un peu lent. Il peut fonctionner plus rapidement en utilisant  une architecture beaucoup plus légère de type SNMPv2c au détriment de ne plus supporter les opérations v3.

Utilisez le paramètre - v2c-arc de ligne de commande pour passer en mode de fonctionnement Simulator SNMPv2c.

Obtenir de l’aide

If something does not work as expected, please try browsing snmpsim mailing list archives or post your question to snmpsim-users@lists.sourceforge.net.

Nous pouvons vous aider sur l’utilisation de ce produit, n’hésitez pas à nous contacter à support@loriotpro.com 

Feedback

Ilya Etingof le concepteur de ce programme est  intéressé par les rapports de bogues et des correctifs, des suggestions et des améliorations.
Il est aussi possible de lui envoyer des images prises à partir d'appareils différents, qui pourront être ensuite livré avec le simulateur.

Assurez-vous dans ce cas que vos images ne contiennent pas d’information privées.

 

NewsletterContact | Nouvelles | Produits | Télécharger | Support | Partenaires Luteus Sarl
   
LoriotPro Search button LoriotPro SiteMap lexique © LUTEUS SARL. Tous droits réservés