IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Automate et trap SNMP


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Automate et trap SNMP
    Bonjour,

    Je viens faire appel aux lumières des développeurs qui seraient intéressés par le problème que je me pose.

    Je vais tenter de faire court afin d'aller directement au coeur du sujet.

    Je suis actuellement en stage dans le domaine des automates programmables jusque la il n'y a pas de problème me diriez-vous ?

    Le développement sur les automates ne présentent pas de réel problème mais c'est plutôt lorsqu'il s'agit de devoir faire communiquer mon automate avec un PC superviseur

    Pour cela nous utilisons le protocole SNMP, je souhaite réaliser un programme qui réalisera des TRAP sur mon automate afin de faire remonter l'état des différentes variables d'entrée-sorties lorsqu'une d'entre elles est modifié (en gros il s'agit d'interruption).

    Jusqu'à maintenant (avec un collègue informaticien), nous avons réalisé les fonction WALK, GET et SET et cela fonctionne plutôt bien pour le moment.

    Maintenant je dois me débrouiller pour le TRAP car mon collègue est un peu occupé et je souhaite aussi réaliser cette fonction moi-même.

    Le soucis est que j'ai très peu de connaissance dans ce domaine mais c'est surtout en programmation que le soucis est majeur, on va dire que je suis loin d'être le plus grand développeur de tout les temps

    Je souhaiterais savoir comment réaliser une fonction TRAP en plus de mes fonctions précédentes ?

    J'avais eu l'idée de réaliser un GET dont je rafraichirais la fenêtre régulièrement afin d'observer les changements de valeurs des variables mais ce n'est pas vraiment ce que je souhaite, je souhaite que ce soit l'automate qui m'informe via SNMP du changement de valeur et non le superviseur en faisant des requêtes intempestives.

    Voici mon code pour réaliser les fonctions WALK, GET et SET.
    Ah oui, c'est programmé en C# avec le logiciel Visual Studio.
    Bien sûr, je développe sous Windws Xp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    using System;
    using System.Collections;
    using SNMPDll;
    
    
    namespace TestSNMPDll
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class Class1
    	{
    		
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		[STAThread]
    		static void Main(string[] args)
    		{
    
    			//LOAD all the MIB found into the directory c:\windows\System32\****************
    			Mib myMib = new Mib();
    
    			//Console.WriteLine("**************Loading MIB's files**************");
    			//myMib.loadDirectoryMib(Environment.GetFolderPath(Environment.SpecialFolder.System));
    			//****************************************************************************
    
    
    			//**************DISPLAY THE loading MIB************************
    			//myMib.walk(@"D:\E2210_V1.5_Release0621.mib");
    			//*************************************************************
    
    
    			//*************INIT SNMP AGENT*********************
    			//SNMPAgent myAgent = new SNMPAgent("192.168.127.254","public","public");
    			 //if you do that please active the snmp capabilities into your compture : "Add/remove windows component" - "Management and monitoring tools"
    
    			//************INIT SNMP OBJECT*********************
    			//	SNMPObject myRequest = new SNMPObject("1.3.6.1.2.1.1.5.0",myMib);
    			//	Console.WriteLine();
    			//	Console.WriteLine("***************Make the request***************");
    			//	Console.WriteLine("I am looking for the value : " + myRequest.getFullName());
    			//	Console.WriteLine("My value is : " + myRequest.getSimpleValue(myAgent));
    			//	Console.WriteLine("The type of my value is : " + myRequest.getType());
    			//	Console.WriteLine("The description of my value is : " + myRequest.getDescription());
    
    			//**********SOME OTHER TEST**********************
    		   testWalk("192.168.127.254","1.3.6.1.4.1.8691.10.2210.10.1.1");
    			
    			//testMultiGet2("192.168.127.254");
    
    			testSet("192.168.127.254");
    
    
    			Console.WriteLine("\nTerminé !!");
    			Console.ReadLine();
    		}
    
    		static private void testMultiGet2(string AddrIP)
    		{
    			Console.WriteLine("test multi get");
    			Console.WriteLine("--------------");
    
    			//Add many request you want
    			SNMPObject[] s = new SNMPObject[20];
    			
    
    			for(int ii=0;ii<20;ii++)
    			{
    				int j = ii+1;
    				s[ii] = new SNMPObject("1.3.6.1.4.1.8691.10.2210.10."+j+".1.4");
    			}
    	
    
    
    			SNMPAgent a = new SNMPAgent(AddrIP,"public","private");
    			Hashtable ht = a.getValues(s);
    			int i = 1;
    			while (true)
    			{
    				if (!ht.Contains(i)) break;
    				//Console.WriteLine("oid : " + s[i-1].getOID());
    
    				
    				if(i<=12){Console.WriteLine("DI " + (int)(i-1)+" value : " + (string)((Hashtable)ht[i])["value"]);}
    				else{Console.WriteLine("DO " + (int)(i-13)+" value : " + (string)((Hashtable)ht[i])["value"]);}
    				
    				//Console.Write("value : " + (string)((Hashtable)ht[i])["value"]);
    				//Console.WriteLine("type : " + (string)((Hashtable)ht[i])["type"]);
    				//Console.WriteLine("\n");
    				i++;
    			}
    
    			Console.WriteLine("");
    			
    		}
    		static private void testMultiGet(string AddrIP)
    		{
    			Console.WriteLine("test multi get");
    			Console.WriteLine("--------------");
    
    			//Add many request you want
    			SNMPObject[] s = new SNMPObject[2];
    			s[0] = new SNMPObject("1.3.6.1.2.1.1.5.0");
    			s[1] = new SNMPObject("1.3.6.1.2.1.2.2.1.16.1");
    			
    
    
    			SNMPAgent a = new SNMPAgent(AddrIP,"public","public");
    			Hashtable ht = a.getValues(s);
    			int i = 1;
    			while (true)
    			{
    				if (!ht.Contains(i)) break;
    				Console.WriteLine("oid : " + s[i-1].getOID());
    				Console.WriteLine("value : " + (string)((Hashtable)ht[i])["value"]);
    				Console.WriteLine("type : " + (string)((Hashtable)ht[i])["type"]);
    				Console.WriteLine("\n");
    				i++;
    			}
    
    			Console.WriteLine("");
    			
    		}
    
    		static private void testWalk(string AddrIP, string item_str)
    		{
    						
    			
    
    			Console.WriteLine("test walk");
    			Console.WriteLine("---------");
    
    			SNMPObject s = new SNMPObject(item_str);
    		//	SNMPObject s = new SNMPObject("1.3.6.1.2.1.2.2.1");
    			SNMPAgent a= new SNMPAgent(AddrIP,"public","public");
    			
    			a.walk(s);
    			Console.WriteLine("");
    		}
    
    		static private void testSet(string AddrIP)
    		{
    			string item_str = "1.3.6.1.4.1.8691.10.2210.10.1.1.5.0";
    
    			//This procedure will cause a error on your computer, because you cannot change the name of your computer by an SNMP request
    			//But of course this will work on a CISCO switch for example
    		
    			SNMPAgent myAgent = new SNMPAgent(AddrIP,"public","public");
    			Console.WriteLine("test Set");
    			Console.WriteLine("--------\n");
    
    			Console.WriteLine("Read the value before the modification");
    			//SNMPObject s = new SNMPObject("1.3.6.1.2.1.1.5.0");
    			
    			SNMPObject s = new SNMPObject(item_str);
    			
    
    			Hashtable ht = s.getValue(myAgent);
    
    			Console.WriteLine("oid : " + s.getOID());
    			Console.WriteLine("value : " + (string)ht["value"]);
    			Console.WriteLine("type : " + (string)ht["type"]);
    			Console.WriteLine("");
    
    			Console.WriteLine("Set the value");
    
    			//s = new SNMPObject("1.3.6.1.2.1.1.5.0");
    
    			s = new SNMPObject(item_str);
    			//myAgent.setValue(s,SNMPDll.SNMPOIDType.OctetString,1);
    			myAgent.setValue(s,SNMPDll.SNMPOIDType.Int,150);
    			
    
    			Console.WriteLine("");
    
    			Console.WriteLine("Read the value after the modification");
    
    			//s = new SNMPObject("1.3.6.1.2.1.1.5.0");
    
    			s = new SNMPObject(item_str);
    			ht = s.getValue(myAgent);
    
    			Console.WriteLine("oid : " + s.getOID());
    			Console.WriteLine("value : " + (string)ht["value"]);
    			Console.WriteLine("type : " + (string)ht["type"]);
    			
    
    
    
    
    		}
    	}
    }

    Merci pour vos réponses



    EDIT : Depuis que j'ai posté j'ai un peu avancé sur le SNMP et le C# mais je suis toujours bloqué sur la manière dont je dois programmer afin d'utiliser le TRAP. Si vous avez des solutions à me proposer ou même des sites à me suggérer sachant que j'ai pas mal cherché sans franc succès .

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Personne n'aurait d'idée sur la question ? Même sans pour autant avoir de rapport avec les automates mais plus sur le SNMP et le système de TRAP

  3. #3
    Membre régulier Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 89
    Points
    89
    Par défaut
    Je dis peut etre des conneries, mais moi je regarderais dans ce sens la.

    Je verrais bien un thread qui scrute ern permanance tes entrées automates en permanance avec une mémorisation de l'état précédent.
    Des qu'il y a un changement de valeur il met a jour les valeurs mémorisées des entrées et rafraichi l'affichage de la fenetre, ou quelque chose du genre

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Ok, je vais réfléchir à ta proposition mais j'avais penser à un système du genre mais le problème de ce genre de solution c'est qu'il y a toujours la notion de requête de la part du superviseur.

    Alors que le système de TRAP c'est l'automate qui m'indique quand a lieu le changement d'état.

    Mais le système que tu m'a proposé pourrais venir se compléter avec le TRAP en venant enregistrer mes Entrées-Sorties dans un fichier lorsqu'un TRAP est renvoyé

    Merci de t'être penché sur mon sujet

  5. #5
    Membre régulier Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 89
    Points
    89
    Par défaut
    ha wi j'avais pas compris ça comme ça.
    Ca rend les choses plus simples en fait, il te suffit de faire une fonction qui lit tes I/O automate et qui les met a jour sur ton superviseur. Il te suffit d'appeller cette fonction a chaque fois que tu détecte l'evenement TRAP.

    Pour ce qui est du trap en lui meme pourquoi ne pas passer par une variable dans la mémoire de ton automate. Genre un booléen que tu set a chaques fois que tu changes une sorties, le superviseurscrute cette variable puis quand il la vois passer a 1, il met a jour ses valeurs et termine par un reset de cette mémoire.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    C'est intéressant ce que tu me proposes, mais...
    Citation Envoyé par jehrikhan Voir le message
    le superviseur scrute cette variable puis quand il la vois passer a 1, il met a jour ses valeurs et termine par un reset de cette mémoire.
    Cette notion implique encore l'idée de lancer une requête de la part du superviseur ( je sais je suis chiant ).

    En fait, ce que je chercherais plus c'est savoir comment développer un programme pour paramétrer le système de TRAP sur mon automate qui sait le gérer et qui connait le protocole SNMP...

    Savoir quels commandes je devrais utiliser, etc...


    Merci beaucoup jehrikhan pour ta proposition car elle m'a permis de voir le truc d'une façon à laquelle je n'avais pas pensé

  7. #7
    Membre régulier Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Points : 89
    Points
    89
    Par défaut
    Il faudrait trouver un moyen de commander le pc depuis le prog automate en gros quoi.

    La je ne saurais pas t'aider, il faudrait que tu épluches ta doc. Mais j'ai jamais rien vu de tel perso, enfin je dis pas que c'est pas possible hein :p juste jamais vu

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Je sais c'est pas commun, c'est une application très spécifique et l'utilisation du SNMP au niveau d'automates programmables est assez récente mais c'est faisable puisque j'arrive déjà à faire des SET et des GET, il me manque seulement le TRAP afin de pouvoir créer un petit applicatif SNMP de test

Discussions similaires

  1. trap snmp en c#
    Par barhum dans le forum C#
    Réponses: 9
    Dernier message: 29/11/2007, 17h08
  2. [snmp] format de traps snmp
    Par liverbird dans le forum Développement
    Réponses: 74
    Dernier message: 20/07/2007, 13h53
  3. [snmp] afficher le contenu d'une trap snmp dans un fichier
    Par liverbird dans le forum Développement
    Réponses: 4
    Dernier message: 20/07/2007, 13h49
  4. trap snmp quelles paramètres
    Par ange1708 dans le forum Développement
    Réponses: 2
    Dernier message: 23/03/2007, 16h45
  5. trap snmp
    Par rocco4 dans le forum Développement
    Réponses: 3
    Dernier message: 13/09/2004, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo