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

Langage PHP Discussion :

SNMPTable : retour chamboulé [PHP 5.3]


Sujet :

Langage PHP

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut SNMPTable : retour chamboulé
    Bonjour à tous,

    suite à une demande de mon supérieur, je dois créer un programme qui récupère les informations d'une BS (station de base) via des requêtes SNMP. Je vais vous expliquer un peu plus la situation dans laquelle je dois procéder.

    Pour une source (point haut), nous avons des antennes émettrices (antenne Alvarion, des Base Station (BS)) où se connecte des clients (les antennes clientes).
    Sur chaque BS est disponible une table d'associations des antennes clientes avec divers informations. Via un explorateur Mib Browser et une requête SNMPTABLE, je peux récupérer ces informations.

    L'OID correspondant à ce tableau est : .1.3.6.1.4.1.12394.1.1.11.5.1.2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    brzaccVLAdbIndex	brzaccVLAdbMacAddress	brzaccVLAdbStatus	brzaccVLAdbSwVersion	brzaccVLAdbSNR	brzaccVLAdbMaxModulationLevel	brzaccVLAdbTxFramesTotal	brzaccVLAdbDroppedFramesTotal	brzaccVLAdbTxSuccessModLevel1	brzaccVLAdbTxSuccessModLevel2	brzaccVLAdbTxSuccessModLevel3	brzaccVLAdbTxSuccessModLevel4	brzaccVLAdbTxSuccessModLevel5	brzaccVLAdbTxSuccessModLevel6	brzaccVLAdbTxSuccessModLevel7	brzaccVLAdbTxSuccessModLevel8	brzaccVLAdbTxFailedModLevel1	brzaccVLAdbTxFailedModLevel2	brzaccVLAdbTxFailedModLevel3	brzaccVLAdbTxFailedModLevel4	brzaccVLAdbTxFailedModLevel5	brzaccVLAdbTxFailedModLevel6	brzaccVLAdbTxFailedModLevel7	brzaccVLAdbTxFailedModLevel8	brzaccVLAdbCirTx	brzaccVLAdbMirTx	brzaccVLAdbCirRx	brzaccVLAdbMirRx	brzaccVLAdbCirMaxDelay	brzaccVLAdbDistance	brzaccVLAdbHwRevision	brzaccVLAdbCpldVer	brzaccVLAdbCountryCode	brzaccVLAdbBootVer	brzaccVLAdbAtpcOption	brzaccVLAdbAdapModOption	brzaccVLAdbBurstModeOption	brzaccVLAdbConcatenationOption	brzaccVLAdbSecurityMode	brzaccVLAdbAuthOption	brzaccVLAdbDataEncyptOption	brzaccVLAdbAge	brzaccVLAdbUnitName	brzaccVLAdbRSSI	brzaccVLAdbIpAddress	Index Value
    1	00-10-E7-XX-XX-XX	associated       	5.2.11	30	modLevel-8 	281201	0	2	1	1	1	1	1	103042	178152	0	0	0	0	0	0	0	0	512	7168	512	2048	5000	4	hwRevisionE	5	1064	1.0.14	enable 	enable 	enable 	enable 	wep	openSystem 	disable 	8	AAAA	-59	192.168.XX.XX	1
    2	00-10-E7-XX-XX-XX	associated       	6.6.2	20	modLevel-5 	681241	0	3	1	1	1	143038	538197	0	0	0	0	0	0	0	0	0	0	128	3072	128	2048	5000	3	hwRevisionE	5	1064	6.5.3	enable 	enable 	enable 	enable 	wep	openSystem 	disable 	8	BBBB	-69	10.128.XX.XX	2
    3	00-10-E7-XX-XX-XX	associated       	6.6.2	13	modLevel-8 	39660	322	15	31	33619	5995	0	0	0	0	0	0	0	319	3	0	0	0	128	6016	128	2048	5000	8	hwRevisionE	5	1064	6.5.3	enable 	enable 	enable 	enable 	wep	openSystem 	disable 	7	CCCC	-76	10.128.XX.XX	3
    Pour avoir le fichier qui sera plus lisible, il y la pièce jointe de disponible.

    Jusque là, tout va bien. Le programme, étant écrit en PHP (pour des questions de souplesse), a besoin de la fonction snmptable que certains connaissent peut-être). Sauf qu'en PHP, elle n'existe pas "vraiment" d'origine.

    Une solution équivalente à cette fonction est disponible sur le site PHP (http://php.net/manual/en/function.snmprealwalk.php). Je l'ai enrichie de quelques lignes afin d'avoir plus de sécurité.

    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
    function oldsnmptable($host, $community, $oid)
    {
    	#TODO: get original state and restore at bottom
    	snmp_set_oid_numeric_print(TRUE);
    	snmp_set_quick_print(TRUE);
    	snmp_set_enum_print(TRUE);
     
    	$retval = array();
    	$raw = @snmpwalkoid($host, $community, $oid);
    	if(!is_array($raw)) return null; #No response
    	if(count($raw) == 0) return $retval; #No data
     
    	$prefix_length = 0;
    	$largest = 0;
    	foreach($raw as $key => $value)
    	{
    		if($prefix_length == 0)
    		{
    			#Don't just use $oid's length since it may be non-numeric
    			$prefix_elements = count(explode('.',$oid));
    			$tmp = '.' . strtok($key, '.');
    			while($prefix_elements > 1)
    			{
    				$tmp .= '.' . strtok('.');
    				$prefix_elements--;
    			}
    			$tmp .= '.';
    			$prefix_length = strlen($tmp);
    		}
    		$key = substr($key, $prefix_length);
    		$index = explode('.', $key, 2);
    		isset($retval[$index[1]]) or $retval[$index[1]] = array();
    		if($largest < $index[0]) $largest = $index[0];
    		$retval[$index[1]][$index[0]] = $value;
    	}
    	if(count($retval) == 0) return $retval; #No data
     
    	#Fill in holes and blanks the agent may "give" you
    	foreach($retval as $k => $x)
    	{
    		for($i = 1; $i <= $largest; $i++) if(!isset($retval[$k][$i])) 		$retval[$k][$i] = '';
    		asort($retval[$k]);
    	}
    	return $retval;
    }
    La fonction fait son travail, c'est à dire qu'elle me retourne sans soucis les infos dans un array qui est facilement manipulable ... encore faut-il qu'elle me retourne tout dans le bon ordre.

    Le soucis est que les données se mélangent, c'est à dire que à un instant t, le tableau retourné par MIB Browser et la fonction sera ... différent.
    Avec quelques tests, la fonction me redonne des résultats entremêlés, c'est à dire que pour la ligne 1, elle va me retourner l'IP de la ligne 3, le tout aléatoirement. La ligne 3 n'aura pas forcément l'IP de la ligne 1 (c'est là ce que ça se gâte pour le coup).

    J'utilise la MIB fournie par le constructeur de l'antenne, c'est à dire "MIB/brzAccVL.mib" (facilement trouvable sur le net).

    Par exemple, ici, je teste un point haut :



    On détecte 3 BS émettrices, sur chaque, je teste la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Récupération du tableau des infos
    $tableBS = snmptable($oBS->IP(), $oBS->Communaute(), '.1.3.6.1.4.1.12394.1.1.11.5.1.2');
    J'ai mis à jour le serveur avec les derniers paquets dispo (php5-snmp en tête). J'avoue que je suis un peu à court d'idée.

    Si vous avez des demandes sur le matos utilisé ou bien une question sur la programmation utilisée ici, n'hésitez pas.

    Je vous remercie.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 02h08
  2. Retour au mode texte par défaut
    Par coca dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 12/12/2002, 18h22
  3. [XP] Retour d'experience
    Par virgile04 dans le forum Méthodes Agiles
    Réponses: 10
    Dernier message: 22/10/2002, 09h25
  4. Retour chariot dans un TMemo ?
    Par Vincent PETIT dans le forum C++Builder
    Réponses: 7
    Dernier message: 27/08/2002, 19h55
  5. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 10h47

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