Réseaux‎ > ‎Quelques Scripts‎ > ‎

Script PHP pour lancer des commandes Telnet sur des équipements Cisco

Version du 29/03/06

Voici la version PHP du script PERL, qui permet de:


  1. Lancer une suite de commande (à entrer dans le fichier commandes.listes)
  2. Sur un groupe d'équipements (mettre leurs adresses IP dans le/les fichiers equipements.liste.)
  3. Le résultat étant enregistré dans un fichier de logs ayant pour nom: log.device.dateheure)

Pré requis:


ToDo List:


  • Utliser le module telnet et/ou ssh
  • Rediriger la sortie vers un fichier de logs


Exemple d'un fichier equipements.liste:

172.16.1.1
172.16.1.2
172.16.1.3


Exemple d'un fichier commandes.liste:

conf t
ntp server 192.168.1.1
exit
wr



Et voici le script:

#!/usr/bin/php -f

<?php

/*


Ce script permet de lancer une suite de commande sur l'ensemble des equipements Cisco

Les commandes sont listees dans le fichier "commandes.liste"

Les adresses IP sont dans les fichiers "equipements.liste"

Un fichier de resultat est genere "log.typededevice.annemoisjourheureminute"

Version 0.2 par Olivier Cochard-Labbe (olivier -AT - freenas.org)

sous License GPL: http://www.gnu.org/copyleft/gpl.html


Ce script utilise la fonction:

PHPCiscoTelnet 1.0 (http://linbox.free.fr/PHPCiscoTelnet.php)

adapted by Cyriac REMY (05/07/18)

adapted from code PHPTelnet 1.0 by Antone Roundy (http://www.geckotribe.com/php-telnet/)

originally adapted from code found on the PHP website

public domain

-----------------------------------------------------------

Copyright (C) 2005 Olivier Cochard-Labbe


This program is free software; you can redistribute it and/or

modify it under the terms of the GNU General Public License

as published by the Free Software Foundation; either version 2

of the License, or (at your option) any later version.


This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.


You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

*/


include ("PHPCiscoTelnet.php");


$fp = fopen('php://stdin', 'r');


echo "\nEntrer le login: ";

$LOGIN = chop(fgets($fp));

if ($LOGIN === "")

exit(0);

echo "\nEntrer le mot de passe: ";

$MOT_DE_PASSE = chop(fgets($fp));

if ($MOT_DE_PASSE === "")

exit(0);


echo "\nEntrer le mot de passe enable: ";

$ENABLE_PASSWORD = chop(fgets($fp));


echo "\nChargement du fichier contenant la liste des commandes 'commandes.liste'...";

$FICHIER_LISTE_COMMANDES = "commandes.liste";

if (file_exists($FICHIER_LISTE_COMMANDES))

{

$TABLEAU_COMMANDES = file($FICHIER_LISTE_COMMANDES);

echo "OK\n";

}

else

{

echo "pas OK\n";

exit();

}


echo "\nChargement du fichier contenant la liste des adresses IP des equipements 'equipements.liste'...";

$FICHIER_LISTE_EQUIPEMENTS = "equipements.liste";

if (file_exists($FICHIER_LISTE_EQUIPEMENTS))

{

$TABLEAU_EQUIPEMENTS = file($FICHIER_LISTE_EQUIPEMENTS);

echo "OK\n";

} else

{

echo "pas OK\n";

exit();

}


$DATE_DU_JOUR = date("Y-m-d-H-i");


echo "\n Creation du fichier log.txt\n";

$file_log = fopen("log.$DATE_DU_JOUR","w");


fputs($file_log, "Liste des commandes entrees:\n\n");

while(list($cle,$COMMANDE) = each($TABLEAU_COMMANDES)) { /* Creer une variable avec chaque ligne*/

$COMMANDE = rtrim($COMMANDE);

fputs($file_log, "Commande: $COMMANDE\n");

}


fputs($file_log, "--------------------------\n");



while(list($cle,$EQUIPEMENT) = each($TABLEAU_EQUIPEMENTS))

{

$EQUIPEMENT = rtrim($EQUIPEMENT); /* supprime le dernier charactere de la variable si c'est un charactere special */

fputs($file_log, "Equipement: $EQUIPEMENT\n");

reset($TABLEAU_COMMANDES); /* Remet le pointeur du tableau a zeo sinon ca ne fonctionne que 1 fois*/

$telnet = new PHPCiscoTelnet();

$result = $telnet->Connect($EQUIPEMENT, $LOGIN, $MOT_DE_PASSE);

switch ($result)

{

case 0:

while(list($cle,$COMMANDE) = each($TABLEAU_COMMANDES)) { /* Creer une variable avec chaque ligne*/

$COMMANDE = rtrim($COMMANDE);

$telnet->enable($ENABLE_PASSWORD);

$telnet->DoCommand($COMMANDE);

fputs($file_log, "Commande: $COMMANDE... OK\n");

$telnet->display();

}

$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;

}


}


fclose($file_log); /* ferme le fichier */


?>




Sous-pages (1) : PHPCiscoTelnet.php
Comments