Page 1 sur 1
Recuperer donnee switch
Posté : 06 janv. 2014, 14:32
par synergie
Bonjour,
Je dois, pour mon stage, créer une interface web permettant la gestion des switchs de la société.
Cependant, je ne vois pas comment faire pour récupérer les données des switchs.
Utiliser snmp ? Ou Telnet ? Ou socket ?
Merci.
Re: Recuperer donnee switch
Posté : 06 janv. 2014, 15:10
par Mazarini
Je suppose que les switch ont des possibilité pour communiquer. La première chose à faire est te renseigner sur ces possibilités.
En fonction du (des ?) protocole supporté par les switch, tu devras commencer par écrire une fonction pour envoyer un "message" au switch et recevoir sa réponse. S'il existe déjà des applications windows pour communiquer avec les switch, tu pourras peut être utiliser un dll déjà développée pour ces applications à condition que le serveur soit sous windows.
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 11:31
par synergie
Merci de la réponse,
J'ai enfaite créer une socket avec fsockopen puis je communique avec le switch en telnet.
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 12:54
par synergie
Autre problème :
Je me connecte bien et arrive à communiquer en telnet avec le switch. Cependant, j'aimerais pouvoir récupérer ce qu'il m'envoie sous forme de tableau afin de pouvoir récupérer les mots "connected" car le rendu est le suivant :
ÿûÿûÿýÿý User Access Verification Username: myusername Password: csc_switch07>show interface status Port Name Status Vlan Duplex Speed Type Fa0/1 P732 PC ASTREINTE connected 17 a-full a-100 10/100BaseTX Fa0/2 BUREAU DP P634 connected 3 a-full a-100 10/100BaseTX
Auriez-vous des solutions ? Je ne vois pas....
Merci.
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 15:02
par Mazarini
Il n'y a pas des spécifications qui pourraient t'aider à exploiter la réponse ?
Si ce que tu affiches provient d'un navigateur, regarde le source de la page, il y a peut être des sauts de ligne ou des balises que le navigateur n'affiche pas.
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 16:51
par synergie
Le code source de la page s'affiche comme en ligne de commande, sous forme de tableau. Seulement, à l'affichage de la page, il me met tout à la suite.
J'essaie donc de traiter le texte par des méthodes telles que substr ou autre mais cela est laborieux. Dois-je faire comme ça ou inscrire le résultat dans un fichier texte pour le traiter ensuite? quelle est la solution la plus simple ?
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 17:06
par Mazarini
Le code source de la page s'affiche comme en ligne de commande, sous forme de tableau. Seulement, à l'affichage de la page, il me met tout à la suite.
...
Donc tu peux faire :
$tab = explode("\n",$resultat);
Tu auras ainsi un tableau des lignes de résultat.
Tu peux ensuite découper chaque ligne en te basant sur l'affichage du source de la page, pas sur l'affichage dans le navigateur qui ignore les blancs et les sauts de lignes
Re: Recuperer donnee switch
Posté : 07 janv. 2014, 17:11
par synergie
En effet, cela marche très bien, j'ai pu voir grâce au var_dump tout ce que contenait le tableau, je n'ai plus qu'à le traiter.
Merci !
Re: Recuperer donnee switch
Posté : 08 janv. 2014, 11:52
par [Compte supprime]
Bonjour,
Même si c'est n'est pas le sujet de départ et peut-être que le but du stage est de développer en PHP, dans ce cas ne pas tenir compte de la suite.
Si le but est de développer en interne une interface web pour la gestion des switchs.
Pourquoi ne pas utiliser des outils libres de supervision déjà disponible tel que Nagios, Centreon, Shinken ?
Orygynz
Re: Recuperer donnee switch
Posté : 13 janv. 2014, 15:56
par synergie
En effet, je dois développer cette application en php mais merci quand même !
Je sèche complètement sur ce problème :
Je dois communiquer avec le switch afin de pouvoir modifier des vlan à distance, via l'application web mais, ce que j'ai fait ne fait que tourner en boucle, et ne s'arrête jamais. Je ne vois pas mon/mes erreurs.
Merci d'avance !
Le code de traitement :
Code : Tout sélectionner
function DoCommand($c)
{
if ($this->fp)
{
fputs($this->fp,"$c\n");
$this->GetResponseUntilPrompt($r);
$r=preg_replace("/\r/", "", $r);
$r=preg_replace("/".$c."/", "", $r);
$tab = explode("\n", $r);
$this->buffer = array_slice($tab, 1, count($tab) - 2);
return 1;
}
return 0;
}
function enable($pwd)
{
fputs($this->fp, "enable\n");
fputs($this->fp, $pwd . "\n");
$this->endPrompt="#";
$this->GetResponseUntilPrompt($tmp);
}
/*
* Fonction permettant de passer en mode configuration terminal
*/
function conft()
{
fputs($this->fp, "conf t\n");
$this->endPrompt="(config)#";
$this->GetResponseUntilPrompt($tmp);
}
function exitConft()
{
fputs($this->fp, "end\n");
$this->endPrompt="#";
$this->GetResponseUntilPrompt($tmp);
}
function interfaceEthernet($numInterface)
{
fputs($this->fp, "interface fastEthernet 0/".$numInterface."\n");
$this->endPrompt="(config-if)#";
$this->GetResponseUntilPrompt($tmp);
}
function confVlanData($numInterface,$vlan)
{
$this->conft();
$this->interfaceEthernet($numInterface);
fputs($this->fp, "switchport mode access\n");
fputs($this->fp, "switchport access vlan ".$vlan."\n");
$this->exitConft();
/*
fputs($this->fp, "interface fastEthernet 0/".$numInterface ."\n");
$this->endPrompt="(config-if)#";
$this->GetResponseUntilPrompt($tmp);
fputs($this->fp, "switchport mode access\n");
fputs($this->fp, "switchport access vlan ".$vlan."\n");
fputs($this->fp, "exit\n");
$this->endPrompt="(config)#";
$this->GetResponseUntilPrompt($tmp);
fputs($this->fp, "exit\n");
$this->endPrompt="#";
$this->GetResponseUntilPrompt($tmp); */
}
function GetResponse(&$r)
{
$r='';
do {
$r.=fread($this->fp,1000);
$s=socket_get_status($this->fp);
} while ($s['unread_bytes']) ;
if ($this->dump)
print $r."\n";
}
function GetResponseUntilPrompt(&$r)
{
$r='';
do
{
$r.=fread($this->fp,10000);
$s=socket_get_status($this->fp);
if (preg_match("/ --More-- /", $r))
{
$r = preg_replace("/ --More-- /", "MORE", $r);
fputs($this->fp, " ");
}
} while (! preg_match("/".$this->endPrompt."$/", $r));
$r=preg_replace("/".chr(8)."/", "", $r);
$r=preg_replace("/MORE /", "", $r);
if ($this->dump)
print $r."\n";
}
Le code d'appel :
Code : Tout sélectionner
if (isset($user)) {
$telnet = new PHPCiscoTelnet();
$result = $telnet->Connect($Ipswitch,$user, $mdp_recu);
switch ($result)
{
case 0:
$telnet->enable($mdp_recu);
$telnet->confVlanData($interface,$vlanData);
$telnet->Disconnect();
break;
case 1:
echo '[PHP Telnet] Connect failed: Unable to open network connection';
break;
case 2:
echo '[PHP Telnet] Connect failed: Unknown host';
break;
case 3:
echo '[PHP Telnet] Connect failed: Login failed';
break;
case 4:
echo '[PHP Telnet] Connect failed: Your PHP version does not support PHP Telnet';
break;
}
}