Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1814 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  SNMP sous PHP/Windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SNMP sous PHP/Windows

n°1372059
doudouche
Posté le 22-05-2006 à 12:47:20  profilanswer
 

Hi !!! Je n'ai pas réellement l'habitude de demander de l'aide mais j'avoue ne pas pouvoir m'en sortir seul cette fois-ci...
Le réseau sur lequel je travail comporte des switch 3com, modele 4400...etc.
Et je travail depuis 3 mois sur un logiciel de gestion de parc.
Je souhaiterait pouvoir connaitre le port sur lequel est branché une machine.
Pour le moment j utilise une session telnet en php via une socket mais ce procédé n est pas tre efficace.
 
Je souhaiterait donc :
 
Via une connection SNMP, pouvoir obtenir la table des address mac sur les switch afin d obtenir le port.
Mes recherches m'ont indiquées qu'une fonctions faisait cela : show-mac-address.
Cependant, je ne connait rien au SNMP, et j avoue etre dans le flou total.
Je suis donc sous windows, g installé le service snmp... Mais que faire désormais ?? Comment utilisé les commandes ? Par quel procédé ? (Invite de commande ? ...)

mood
Publicité
Posté le 22-05-2006 à 12:47:20  profilanswer
 

n°1372161
Berceker U​nited
PSN : berceker_united
Posté le 22-05-2006 à 14:31:06  profilanswer
 

http://fr2.php.net/manual/fr/ref.snmp.php je pense que là tu auras de quoi faire.

n°1372267
doudouche
Posté le 22-05-2006 à 15:42:27  profilanswer
 

Je me suis déja documenté sur ce genre de site, tous les sites proposant la meme solution et les meme explications copier collées.
 
Toutefois, aprés avoir configurer ma liaison snmp et lancé ce programme :
 
<?
echo '<font size="1" color="#1A237A">' . date("l dS of F Y h:i:s A" ) . '</font>';
//172.21.97.236->adresse du switch 3com
$a = snmpwalkoid("172.21.97.236", "public", "" );
?>
 
Je m appercoi que rien ne se passe, ma page php tourne sans fin.
 
J ai pourtant cocher toutes les extentions possible sous php my admin, défini mon client snmp sous la gestion du poste de travail windows, enlevé les ; devant les lignes correspondantes sous php.ini sous mon repertoire apache, redémarer le serveur...
 
 

n°1372297
doudouche
Posté le 22-05-2006 à 16:09:38  profilanswer
 

PS : Le programme fonctionne en local mais tourne sans fin lors d'une connection à un switch.

n°1372317
Berceker U​nited
PSN : berceker_united
Posté le 22-05-2006 à 16:20:56  profilanswer
 

doudouche a écrit :

PS : Le programme fonctionne en local mais tourne sans fin lors d'une connection à un switch.


Il faut avouer que ce domaine, à mon humble avis, est peut utilisé. Je dirais que tu es un pionner dans ce domaine  :sol:. Je ne pense pas qu'en activant toute les extensions que cela va fonctionner, pire tu risques de créer des conflits. Je pense plus qu'il y a un petit problème coté switch. Quand je dis problème c'est qu'il a pas les bonnes information pour ce que tu demandes de faire. Peux-tu nous donner du code.

n°1376644
doudouche
Posté le 29-05-2006 à 13:26:03  profilanswer
 

Alors pour ceux  que cela interesse, le  programme fonctionne , le probleme  venazit du fait que la MIB des switch est relativement conséquente et nécéssite un temps immense  afin d etre entierement lue, il faut donc préciser  une OID au sein de la fonction snmpwalkOID afin de limiter la recherche et donc le temps de traitement.
PAr ailleur, cette méthoide permet de connaitre quel @MAC est  connectée sur  le port d'un switch, mais également (sur un pc distant) de connaite toutes les caractéristiues de celui-ci : logiciels, matériel etc etc.
Je recommande donc vivement cette solution lors de la création d'un logiciel de gestion de parc.

n°1376651
Berceker U​nited
PSN : berceker_united
Posté le 29-05-2006 à 13:32:32  profilanswer
 

Cool merci pour l'information. ;)

n°1396530
casimir92
Posté le 28-06-2006 à 13:57:25  profilanswer
 

Justement j'essaye de récuperer les @mac et @ip des stations connectés aux ports d'un cisco, mais je ne trouve pas dans la mib l'OID correspondant.
 
Aurais-tu une idée ?

n°1717857
elmarokinh​o
Posté le 15-04-2008 à 15:02:04  profilanswer
 

Salut tout le monde, je sais que ca fait déja un moment mais je voudrais avoir des infos sur ce topic. Doudouche peut tu me montrer le code avec lequel tu a réussi a faire tourner le programme.  
 
merci
 
mon mail elmarokinhodu76[at]hotm4il point com ( a remettre en ordre ;-) )

n°1722630
elmarokinh​o
Posté le 23-04-2008 à 10:22:25  profilanswer
 

c'est bon moi j'ai réussi ... a partir d'un adresse mac ou d'une adresse IP je determine sur quel port est connecté la machine, si il y a plusieurs adresse sur le meme port j'indique qu'il s'agit d'un port d'interconexion.

mood
Publicité
Posté le 23-04-2008 à 10:22:25  profilanswer
 

n°1839302
wiwi9
Posté le 17-01-2009 à 09:04:06  profilanswer
 

elmarokinho pourrais tu m'envoyer ton programme qui a partir d'un adresse mac ou d'une adresse IP tu determine sur quel port est connecté la machine.
 
Avec des explications si possible
 
j'ai trouvé ce programme
 
<?php
 
 class Commutateur{
  // Constantes MIB Snmp
  private $OID_MAC = '.iso.3.6.1.2.1.17.4.3.1.1';
  private $OID_PORT = '.iso.3.6.1.2.1.17.4.3.1.2';
  private $OID_PORT_CHAINAGE = '.iso.3.6.1.4.1.45.1.6.13.2.1.1.2';
  private $OID_IP_CHAINAGE =   '.iso.3.6.1.4.1.45.1.6.13.2.1.1.3';
  private $OID_NOM = '.iso.3.6.1.2.1.1.5.0';
  private $OID_LOCALISATION = '.iso.3.6.1.2.1.1.6.0';
 
  private $ip;
  private $communaute;
  private $nom;
  private $localisation;
   
  public function Commutateur($ip_root,$communaute){
   $this->ip = $ip_root;
   $this->communaute = $communaute;
   $this->nom = snmpget($this->ip,$this->communaute,$this->OID_NOM);
   $this->localisation = snmpget($this->ip,$this->communaute,$this->OID_LOCALISATION);
  }
 
  public function getIp(){
   return $this->ip;
  }
  public function getNom(){
   return $this->nom;
  }
  public function getLocalisation(){
   return $this->localisation;
  }
 
  // Recherche @Mac sur le switch
  // Retourne le n° de port ou False
  public function findMac($mac_cherche){
   $mac_cherche=strtoupper($mac_cherche);
   $macs = snmprealwalk($this->ip, $this->communaute, $this->OID_MAC); //Récupère MAC connues du switch par SNMP
   //Boucle sur chaque adresse MAC
   foreach($macs as $cle => $valeur){
    $mac = str_replace(" ",":",substr($valeur,6,17)); // Suppression HEX et espaces
    if($mac == $mac_cherche){ // Filtre sur MAC recherchée
     $oid = $this->OID_PORT.".".substr($cle,26); // Construit OID du port contenant la MAC recherchée
     $ports = snmprealwalk($this->ip, $this->communaute, $this->OID_PORT); // Récupère les ports du switch par SNMP
     // Boucle sur chaque port
     foreach($ports as $cle => $port){
      if($cle == $oid){ // Filtre sur port ayant l'OID recherché
       return $port; // Port trouvé pour l'adresse MAC, on retourne le N° port
      }
     }
    }
   }
   return false; // Port non trouvé : retourne False.
  }
   
  // Retourne le switch suivant à partir du N° de port
  // Retourne @Ip du switch suivant ou False si port non chainé
  public function switchSuivant($chainage){
   // Récupération port chainé du switch
   $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_PORT_CHAINAGE);
   foreach($snmp as $cle => $port){
    if($port == $chainage){
     $oid_next = rtrim(substr($cle,strlen($this->OID_PORT_CHAINAGE)));
     // Récupération IP des switches suivants
     $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_IP_CHAINAGE);
     foreach($snmp as $cle => $ip){
      $ip_next = rtrim(substr($ip,strlen('IpAddress: ')%

n°1839303
wiwi9
Posté le 17-01-2009 à 09:07:43  profilanswer
 

elmarokinho pourrais tu m'envoyer ton programme qui a partir d'un adresse mac ou d'une adresse IP tu determine sur quel port est connecté la machine.
 
Avec des explications si possible
 
j'ai trouvé ce programme
 
<?php
 
 class Commutateur{
  // Constantes MIB Snmp
  private $OID_MAC = '.iso.3.6.1.2.1.17.4.3.1.1';
  private $OID_PORT = '.iso.3.6.1.2.1.17.4.3.1.2';
  private $OID_PORT_CHAINAGE = '.iso.3.6.1.4.1.45.1.6.13.2.1.1.2';
  private $OID_IP_CHAINAGE =   '.iso.3.6.1.4.1.45.1.6.13.2.1.1.3';
  private $OID_NOM = '.iso.3.6.1.2.1.1.5.0';
  private $OID_LOCALISATION = '.iso.3.6.1.2.1.1.6.0';
 
  private $ip;
  private $communaute;
  private $nom;
  private $localisation;
   
  public function Commutateur($ip_root,$communaute){
   $this->ip = $ip_root;
   $this->communaute = $communaute;
   $this->nom = snmpget($this->ip,$this->communaute,$this->OID_NOM);
   $this->localisation = snmpget($this->ip,$this->communaute,$this->OID_LOCALISATION);
  }
 
  public function getIp(){
   return $this->ip;
  }
  public function getNom(){
   return $this->nom;
  }
  public function getLocalisation(){
   return $this->localisation;
  }
 
  // Recherche @Mac sur le switch
  // Retourne le n° de port ou False
  public function findMac($mac_cherche){
   $mac_cherche=strtoupper($mac_cherche);
   $macs = snmprealwalk($this->ip, $this->communaute, $this->OID_MAC); //Récupère MAC connues du switch par SNMP
   //Boucle sur chaque adresse MAC
   foreach($macs as $cle => $valeur){
    $mac = str_replace(" ",":",substr($valeur,6,17)); // Suppression HEX et espaces
    if($mac == $mac_cherche){ // Filtre sur MAC recherchée
     $oid = $this->OID_PORT.".".substr($cle,26); // Construit OID du port contenant la MAC recherchée
     $ports = snmprealwalk($this->ip, $this->communaute, $this->OID_PORT); // Récupère les ports du switch par SNMP
     // Boucle sur chaque port
     foreach($ports as $cle => $port){
      if($cle == $oid){ // Filtre sur port ayant l'OID recherché
       return $port; // Port trouvé pour l'adresse MAC, on retourne le N° port
      }
     }
    }
   }
   return false; // Port non trouvé : retourne False.
  }
   
  // Retourne le switch suivant à partir du N° de port
  // Retourne @Ip du switch suivant ou False si port non chainé
  public function switchSuivant($chainage){
   // Récupération port chainé du switch
   $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_PORT_CHAINAGE);
   foreach($snmp as $cle => $port){
    if($port == $chainage){
     $oid_next = rtrim(substr($cle,strlen($this->OID_PORT_CHAINAGE)));
     // Récupération IP des switches suivants
     $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_IP_CHAINAGE);
     foreach($snmp as $cle => $ip){
      $ip_next = rtrim(substr($ip,strlen('IpAddress: ')%

n°1839304
wiwi9
Posté le 17-01-2009 à 09:08:04  profilanswer
 

elmarokinho pourrais tu m'envoyer ton programme qui a partir d'un adresse mac ou d'une adresse IP tu determine sur quel port est connecté la machine.
 
Avec des explications si possible
 
j'ai trouvé ce programme
 
<?php
 
 class Commutateur{
  // Constantes MIB Snmp
  private $OID_MAC = '.iso.3.6.1.2.1.17.4.3.1.1';
  private $OID_PORT = '.iso.3.6.1.2.1.17.4.3.1.2';
  private $OID_PORT_CHAINAGE = '.iso.3.6.1.4.1.45.1.6.13.2.1.1.2';
  private $OID_IP_CHAINAGE =   '.iso.3.6.1.4.1.45.1.6.13.2.1.1.3';
  private $OID_NOM = '.iso.3.6.1.2.1.1.5.0';
  private $OID_LOCALISATION = '.iso.3.6.1.2.1.1.6.0';
 
  private $ip;
  private $communaute;
  private $nom;
  private $localisation;
   
  public function Commutateur($ip_root,$communaute){
   $this->ip = $ip_root;
   $this->communaute = $communaute;
   $this->nom = snmpget($this->ip,$this->communaute,$this->OID_NOM);
   $this->localisation = snmpget($this->ip,$this->communaute,$this->OID_LOCALISATION);
  }
 
  public function getIp(){
   return $this->ip;
  }
  public function getNom(){
   return $this->nom;
  }
  public function getLocalisation(){
   return $this->localisation;
  }
 
  // Recherche @Mac sur le switch
  // Retourne le n° de port ou False
  public function findMac($mac_cherche){
   $mac_cherche=strtoupper($mac_cherche);
   $macs = snmprealwalk($this->ip, $this->communaute, $this->OID_MAC); //Récupère MAC connues du switch par SNMP
   //Boucle sur chaque adresse MAC
   foreach($macs as $cle => $valeur){
    $mac = str_replace(" ",":",substr($valeur,6,17)); // Suppression HEX et espaces
    if($mac == $mac_cherche){ // Filtre sur MAC recherchée
     $oid = $this->OID_PORT.".".substr($cle,26); // Construit OID du port contenant la MAC recherchée
     $ports = snmprealwalk($this->ip, $this->communaute, $this->OID_PORT); // Récupère les ports du switch par SNMP
     // Boucle sur chaque port
     foreach($ports as $cle => $port){
      if($cle == $oid){ // Filtre sur port ayant l'OID recherché
       return $port; // Port trouvé pour l'adresse MAC, on retourne le N° port
      }
     }
    }
   }
   return false; // Port non trouvé : retourne False.
  }
   
  // Retourne le switch suivant à partir du N° de port
  // Retourne @Ip du switch suivant ou False si port non chainé
  public function switchSuivant($chainage){
   // Récupération port chainé du switch
   $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_PORT_CHAINAGE);
   foreach($snmp as $cle => $port){
    if($port == $chainage){
     $oid_next = rtrim(substr($cle,strlen($this->OID_PORT_CHAINAGE)));
     // Récupération IP des switches suivants
     $snmp=snmprealwalk($this->ip, $this->communaute, $this->OID_IP_CHAINAGE);
     foreach($snmp as $cle => $ip){
      $ip_next = rtrim(substr($ip,strlen('IpAddress: ')%

n°1839341
wiwi9
Posté le 17-01-2009 à 11:32:41  profilanswer
 

désolé le msg d'avant n'est pas complet
 
il me faut un programme port adresse mac pour cisco.
j'en ai trouvé un pour nortel mais j'ai des problèmes de correspondance oid pour ces valeurs
p
  private $OID_PORT_CHAINAGE = '.iso.3.6.1.4.1.45.1.6.13.2.1.1.2';
  private $OID_IP_CHAINAGE =   '.iso.3.6.1.4.1.45.1.6.13.2.1.1.3';
  private $OID_LOCALISATION = '.iso.3.6.1.2.1.1.6.0';
 
merci d'avance pour votre aide

n°1839438
jagstang
Pa Capona ಠ_ಠ
Posté le 17-01-2009 à 15:55:19  profilanswer
 

quel type de switch Cisco ?  
 
Sinon regarde par là :
http://www.cisco.com/en/US/tech/tk [...] 9199.shtml
 
 
.1.3.6.1.2.1.31.1.1.1.1
 
Je te conseill d'utiliser un client snmp pour windows d'abord, tu perdras moins de temps. du genre :
http://3d2f.com/programs/32-258-fr [...] load.shtml


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1839537
wiwi9
Posté le 17-01-2009 à 21:15:33  profilanswer
 

c'est des switch 3560
j'ai lu des liens
il faut qque j'

n°1839540
wiwi9
Posté le 17-01-2009 à 21:17:09  profilanswer
 

c'est des switch 3560
j'ai lu des liens
il faut que j'arrive à trouver ou faire (plus dur car je ne suis pas programmateur) un programme automatique
plus d'une centaine de mac à identifier


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  SNMP sous PHP/Windows

 

Sujets relatifs
Comment initialiser les variables MySQL en PHP ?[PHP/MySql] Supprimer une table SQL temp dans une session PHP
[PHP] .htaccess, magic_quote et site indisponibleProblème de vitesse Apache/Php sous Windows (p.r. à EasyPHP)
Problème requête PHPProgrammation PHP
Besoin d'aide pour pièces jointes avec PHP Mailer[PHP+XML] replaceNode
Commentaires PHP 
Plus de sujets relatifs à : SNMP sous PHP/Windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR