Accueil > > > LOOKINKGLASS - CISCO - PING - TRACEROUTE - FSOCKOPEN()
LOOKINKGLASS - CISCO - PING - TRACEROUTE - FSOCKOPEN()
Information sur la source
Description
Ce code Php a pour but de prendre la main sur un routeur Cisco et de passer des commandes. Les commandes permetent l'execution d'un ping, d'un traceroute, et de la visualisation de l'occupation mémoire et processeur du routeur. Une démo du code est disponnible à l'adresse suivante : http://www.frameip.com/lookingglass/ ----------- ----------- http://www.frameip.com Pour ceux qui aiment TCPIP ----------------------
Source
- <?php
-
- // ********************************************
- // Nom du script : lookingglass.php
- // Auteur : SebF@frameIP.com.pas.de.spam
- // Date de création : 15 mars 2004
- // Licence : Ce script est libre de toute utilisation.
- // La seule condition existante est de faire référence au site www.frameip.com afin de respecter le travail d'autrui.
- // ********************************************
-
- // ********************************************
- // Affichage de l'entête html
- // ********************************************
- echo
- '
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
- <html>
-
- <head>
-
- <LINK REL="StyleSheet" HREF="../style.css" TYPE="text/css">
-
- <title>FrameIP, Pour ceux qui aiment IP - Script Lookingglass</title>
-
- <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <META NAME="AUTHOR" CONTENT="www.frameip.com">
- <META NAME="COPYRIGHT" CONTENT="Copyright (c) 2003 by framip">
- <META NAME="KEYWORDS" CONTENT="lookingglass, ping, tracert, traceroute, icmp, cisco, bgp, route, show, enable, en, routeur, temps de reponse, test, proc, cpu, mem, hist, conf t, terminal, length">
- <META NAME="DESCRIPTION" CONTENT="Frameip, pour ceux qui aiment IP - Script Lookingglass">
- <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
- <META NAME="REVISIT-AFTER" CONTENT="1 DAYS">
- <META NAME="RATING" CONTENT="GENERAL">
- <META NAME="GENERATOR" CONTENT="powered by frameip.com - webmaster@frameip.com">
-
- </head>
-
- <body>
- ';
-
- // *****************************
- // Récupération des champs
- // *****************************
- $ping_ip_demande=$_POST['ipaddress'];
- $choix_de_la_commande=$_POST['valeur_bouton'];
-
- // *****************************
- // Création de la commande à partir du bouton selectionné
- // *****************************
- if ($choix_de_la_commande=="bouton_ping")
- $commande_cisco="ping ".$ping_ip_demande."\n";
- else if ($choix_de_la_commande=="bouton_traceroute")
- $commande_cisco="traceroute ".$ping_ip_demande."\n";
- else if ($choix_de_la_commande=="bouton_cpu")
- $commande_cisco="sh proc cpu hist\n";
- else if ($choix_de_la_commande=="bouton_mem")
- $commande_cisco="sh mem stat hist\n";
- else
- $commande_cisco="\n";
-
- // **********************************************
- // Récupération de la date et heure
- // **********************************************
- $annee=date("Y");
- $mois=date("m");
- $jour=date("d");
- $heure=date("H");
- $minute=date("i");
- $seconde=date("s");
-
- // **********************************************
- // Récupération de l'IP cliente
- // **********************************************
- $ip_client=getenv("REMOTE_ADDR");
-
- // **********************************************
- // Récupération du Ptr de l'IP cliente
- // **********************************************
- $ptr=gethostbyaddr("$ip_client");
- if ($ptr==$ip_client)
- $ptr="Pas de ptr";
-
- // **********************************************
- // Récupération du port TCP source
- // **********************************************
- $port_source=getenv("REMOTE_PORT");
-
- // **********************************************
- // Récupération de l'IP du browser
- // **********************************************
- $ip_browser=getenv("HTTP_X_FORWARDED_FOR");
-
- // *****************************
- // Initiation des variables
- // *****************************
- $routeur_ip="routeur.frameip.com";
- $prompt_cisco="Routeur_SebF>";
-
- // *****************************
- // Interdie la saisie d'une ip privée
- // *****************************
- if (est_ce_une_ip_privee($ping_ip_demande)==true)
- lookingglass_erreur(1);
-
- // *****************************
- // Ouverture de la session TCP
- // *****************************
- $id_de_la_socket=@fsockopen($routeur_ip,23,&$errno,&$errstr,2);
-
- // *****************************
- // Valide si l'ouverture de session TCP a eu lieu
- // *****************************
- if($id_de_la_socket)
- {
- // ********************************************
- // Présentation des résultats
- // ********************************************
- echo '
- <p align="center">
- <font size="4" color="#008000">
- <b>
- Lookingglass
- </b>
- </font>
- </p>
- ';
-
- // *****************************
- // Configuration du timeout maximum à 17 pour être à -1 de celui de l'hébergeur
- // *****************************
- @socket_set_timeout($id_de_la_socket,17);
-
- // *****************************
- // Passage de la socket en mode non bloquant
- // *****************************
- @stream_set_blocking($id_de_la_socket,false);
-
- // *****************************
- // Reception
- // *****************************
- reception($id_de_la_socket,"Password: ",false);
-
- // *****************************
- // Envoi du password
- // *****************************
- fputs ($id_de_la_socket, "password\n");
-
- // *****************************
- // Reception
- // *****************************
- reception($id_de_la_socket,$prompt_cisco,false);
-
- // *****************************
- // Indication au routeur que le buffer de reception est illimité
- // *****************************
- fputs ($id_de_la_socket, "terminal length 0\n");
-
- // *****************************
- // Reception
- // *****************************
- reception($id_de_la_socket,$prompt_cisco,false);
-
- // *****************************
- // Affichage du prompt
- // *****************************
- echo $prompt_cisco;
-
- // *****************************
- // Envoi de la commande
- // *****************************
- fputs ($id_de_la_socket, $commande_cisco);
-
- // *****************************
- // Reception
- // *****************************
- reception($id_de_la_socket,$prompt_cisco,true);
-
- // ********************************************
- // Fin du script général
- // ********************************************
- fin_du_script();
- }
- else
- lookingglass_erreur(2);
-
- function reception($id_de_la_socket,$chaine_attendue,$affichage)
- // Argument 1 : $id_de_la_socket est de type SOCKET. Il représente l'id de la socket à analyser.
- // Argument 2 : $chaine_attendue est de type char xx[xx]. Il représente la chaine de caractère indiquant la fin de la reception.
- // Argument 3 : $affichage est de type bool. Il indique si l'echo des caractères reçu doit être affiché.
- {
- // *****************************
- // Initiation des variables
- // *****************************
- $chaine_recue="";
- $tempo="";
- $condition_de_sortie=0;
-
- // *****************************
- // Boucle de reception
- // *****************************
- while($condition_de_sortie==0)
- {
- // *****************************
- // Valide si la chaine attendue est réceptionnée ou la fin du tampon
- // *****************************
- if (strpos($chaine_recue,$chaine_attendue)!=false||@feof($id_de_la_socket))
- $condition_de_sortie=1;
-
- // *****************************
- // Reception des données de 1280 octets, mais peu importe dû au mode non bloquant
- // *****************************
- $tempo=@fgets($id_de_la_socket,1024);
-
- // *****************************
- // Force l'affiche
- // *****************************
- flush();
-
- // *****************************
- // Remplace le code de retour charriot pour correspondre à la norme html
- // *****************************
- $tempo=str_replace("\n","<br>",$tempo);
-
- // *****************************
- // Affichage des données recues
- // *****************************
- if ($affichage==true)
- echo $tempo;
-
- // *****************************
- // Concatenation des donnée recue afin de pourvoir comparer par rapport à la chaine attendue de sortie
- // *****************************
- $chaine_recue.=$tempo;
- }
- }
-
- function est_ce_une_ip_privee($adresse_ip)
- // Argument 1 : $adresse_ip est de type char xx[nn]. Il représente l'adresse IP à comparer.
- // Return : La valeur retournée est de type bool. Il représente true si l'IP est de privée.
- {
- // ********************************************
- // Validation que la variable $adresse_ip est bien une IP
- // ********************************************
- if (ip2long($adresse_ip)==-1)
- return (false); // !!!!! Attention je concidère les IP non valide comme une ip non privée !!!!!
-
- // ********************************************
- // Vérification si l'IP est compris dans le network 10/8
- // ********************************************
- if ( (ip2long($adresse_ip)>=ip2long("10.0.0.0")) && (ip2long($adresse_ip)<=ip2long("10.255.255.255")) )
- return (true);
-
- // ********************************************
- // Vérification si l'IP est compris dans le network 192.168/16
- // ********************************************
- if ( (ip2long($adresse_ip)>=ip2long("192.168.0.0")) && (ip2long($adresse_ip)<=ip2long("192.168.255.255")) )
- return (true);
-
- // ********************************************
- // Vérification si l'IP est compris dans le network 172.16/19
- // ********************************************
- if ( (ip2long($adresse_ip)>=ip2long("172.16.0.0")) && (ip2long($adresse_ip)<=ip2long("172.31.255.255")) )
- return (true);
-
- return (false);
- }
-
- // ********************************************
- // Fonction d'affichage de l'erreur de saisie
- // ********************************************
- function lookingglass_erreur($erreur) // $erreur représente le numéro d'erreur.
- {
- // ********************************************
- // Affichage de titre
- // ********************************************
- echo
- '
- <p align="center">
- <b>
- <font size="5" color="#008000">
- Erreur
- </font>
- </b>
- </p>
- ';
-
- // ********************************************
- // Affichage de l'erreur
- // ********************************************
- echo
- '
- <p>
- ';
-
- // ********************************************
- // Message personnalisé
- // ********************************************
- if ($erreur==1)
- echo 'Désolé, pour des raisons de sécurité, l\'équipe FrameIP ne peut pas vous permettre d\'utiliser les adresses privées.';
- elseif ($erreur==2)
- echo 'Désolé, impossible d\'ouvrir la session TCP à destination du routeur.';
-
- // ********************************************
- // Fin du script général
- // ********************************************
- fin_du_script();
- }
-
- function fin_du_script()
- {
- // ********************************************
- // Affiche de l'Url
- // ********************************************
- echo '
- <p align="right">
- <a target="_blank" href="http://www.frameip.com">
- www.frameip.com
- </a>
- </p>
- ';
-
- // ********************************************
- // Fin de la page Html
- // ********************************************
- echo
- '
- </body>
-
- </html>
- ';
-
- // ********************************************
- // Fin du script général
- // ********************************************
- exit(0);
- }
-
- ?>
-
<?php
// ********************************************
// Nom du script : lookingglass.php
// Auteur : SebF@frameIP.com.pas.de.spam
// Date de création : 15 mars 2004
// Licence : Ce script est libre de toute utilisation.
// La seule condition existante est de faire référence au site www.frameip.com afin de respecter le travail d'autrui.
// ********************************************
// ********************************************
// Affichage de l'entête html
// ********************************************
echo
'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<LINK REL="StyleSheet" HREF="../style.css" TYPE="text/css">
<title>FrameIP, Pour ceux qui aiment IP - Script Lookingglass</title>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META NAME="AUTHOR" CONTENT="www.frameip.com">
<META NAME="COPYRIGHT" CONTENT="Copyright (c) 2003 by framip">
<META NAME="KEYWORDS" CONTENT="lookingglass, ping, tracert, traceroute, icmp, cisco, bgp, route, show, enable, en, routeur, temps de reponse, test, proc, cpu, mem, hist, conf t, terminal, length">
<META NAME="DESCRIPTION" CONTENT="Frameip, pour ceux qui aiment IP - Script Lookingglass">
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<META NAME="REVISIT-AFTER" CONTENT="1 DAYS">
<META NAME="RATING" CONTENT="GENERAL">
<META NAME="GENERATOR" CONTENT="powered by frameip.com - webmaster@frameip.com">
</head>
<body>
';
// *****************************
// Récupération des champs
// *****************************
$ping_ip_demande=$_POST['ipaddress'];
$choix_de_la_commande=$_POST['valeur_bouton'];
// *****************************
// Création de la commande à partir du bouton selectionné
// *****************************
if ($choix_de_la_commande=="bouton_ping")
$commande_cisco="ping ".$ping_ip_demande."\n";
else if ($choix_de_la_commande=="bouton_traceroute")
$commande_cisco="traceroute ".$ping_ip_demande."\n";
else if ($choix_de_la_commande=="bouton_cpu")
$commande_cisco="sh proc cpu hist\n";
else if ($choix_de_la_commande=="bouton_mem")
$commande_cisco="sh mem stat hist\n";
else
$commande_cisco="\n";
// **********************************************
// Récupération de la date et heure
// **********************************************
$annee=date("Y");
$mois=date("m");
$jour=date("d");
$heure=date("H");
$minute=date("i");
$seconde=date("s");
// **********************************************
// Récupération de l'IP cliente
// **********************************************
$ip_client=getenv("REMOTE_ADDR");
// **********************************************
// Récupération du Ptr de l'IP cliente
// **********************************************
$ptr=gethostbyaddr("$ip_client");
if ($ptr==$ip_client)
$ptr="Pas de ptr";
// **********************************************
// Récupération du port TCP source
// **********************************************
$port_source=getenv("REMOTE_PORT");
// **********************************************
// Récupération de l'IP du browser
// **********************************************
$ip_browser=getenv("HTTP_X_FORWARDED_FOR");
// *****************************
// Initiation des variables
// *****************************
$routeur_ip="routeur.frameip.com";
$prompt_cisco="Routeur_SebF>";
// *****************************
// Interdie la saisie d'une ip privée
// *****************************
if (est_ce_une_ip_privee($ping_ip_demande)==true)
lookingglass_erreur(1);
// *****************************
// Ouverture de la session TCP
// *****************************
$id_de_la_socket=@fsockopen($routeur_ip,23,&$errno,&$errstr,2);
// *****************************
// Valide si l'ouverture de session TCP a eu lieu
// *****************************
if($id_de_la_socket)
{
// ********************************************
// Présentation des résultats
// ********************************************
echo '
<p align="center">
<font size="4" color="#008000">
<b>
Lookingglass
</b>
</font>
</p>
';
// *****************************
// Configuration du timeout maximum à 17 pour être à -1 de celui de l'hébergeur
// *****************************
@socket_set_timeout($id_de_la_socket,17);
// *****************************
// Passage de la socket en mode non bloquant
// *****************************
@stream_set_blocking($id_de_la_socket,false);
// *****************************
// Reception
// *****************************
reception($id_de_la_socket,"Password: ",false);
// *****************************
// Envoi du password
// *****************************
fputs ($id_de_la_socket, "password\n");
// *****************************
// Reception
// *****************************
reception($id_de_la_socket,$prompt_cisco,false);
// *****************************
// Indication au routeur que le buffer de reception est illimité
// *****************************
fputs ($id_de_la_socket, "terminal length 0\n");
// *****************************
// Reception
// *****************************
reception($id_de_la_socket,$prompt_cisco,false);
// *****************************
// Affichage du prompt
// *****************************
echo $prompt_cisco;
// *****************************
// Envoi de la commande
// *****************************
fputs ($id_de_la_socket, $commande_cisco);
// *****************************
// Reception
// *****************************
reception($id_de_la_socket,$prompt_cisco,true);
// ********************************************
// Fin du script général
// ********************************************
fin_du_script();
}
else
lookingglass_erreur(2);
function reception($id_de_la_socket,$chaine_attendue,$affichage)
// Argument 1 : $id_de_la_socket est de type SOCKET. Il représente l'id de la socket à analyser.
// Argument 2 : $chaine_attendue est de type char xx[xx]. Il représente la chaine de caractère indiquant la fin de la reception.
// Argument 3 : $affichage est de type bool. Il indique si l'echo des caractères reçu doit être affiché.
{
// *****************************
// Initiation des variables
// *****************************
$chaine_recue="";
$tempo="";
$condition_de_sortie=0;
// *****************************
// Boucle de reception
// *****************************
while($condition_de_sortie==0)
{
// *****************************
// Valide si la chaine attendue est réceptionnée ou la fin du tampon
// *****************************
if (strpos($chaine_recue,$chaine_attendue)!=false||@feof($id_de_la_socket))
$condition_de_sortie=1;
// *****************************
// Reception des données de 1280 octets, mais peu importe dû au mode non bloquant
// *****************************
$tempo=@fgets($id_de_la_socket,1024);
// *****************************
// Force l'affiche
// *****************************
flush();
// *****************************
// Remplace le code de retour charriot pour correspondre à la norme html
// *****************************
$tempo=str_replace("\n","<br>",$tempo);
// *****************************
// Affichage des données recues
// *****************************
if ($affichage==true)
echo $tempo;
// *****************************
// Concatenation des donnée recue afin de pourvoir comparer par rapport à la chaine attendue de sortie
// *****************************
$chaine_recue.=$tempo;
}
}
function est_ce_une_ip_privee($adresse_ip)
// Argument 1 : $adresse_ip est de type char xx[nn]. Il représente l'adresse IP à comparer.
// Return : La valeur retournée est de type bool. Il représente true si l'IP est de privée.
{
// ********************************************
// Validation que la variable $adresse_ip est bien une IP
// ********************************************
if (ip2long($adresse_ip)==-1)
return (false); // !!!!! Attention je concidère les IP non valide comme une ip non privée !!!!!
// ********************************************
// Vérification si l'IP est compris dans le network 10/8
// ********************************************
if ( (ip2long($adresse_ip)>=ip2long("10.0.0.0")) && (ip2long($adresse_ip)<=ip2long("10.255.255.255")) )
return (true);
// ********************************************
// Vérification si l'IP est compris dans le network 192.168/16
// ********************************************
if ( (ip2long($adresse_ip)>=ip2long("192.168.0.0")) && (ip2long($adresse_ip)<=ip2long("192.168.255.255")) )
return (true);
// ********************************************
// Vérification si l'IP est compris dans le network 172.16/19
// ********************************************
if ( (ip2long($adresse_ip)>=ip2long("172.16.0.0")) && (ip2long($adresse_ip)<=ip2long("172.31.255.255")) )
return (true);
return (false);
}
// ********************************************
// Fonction d'affichage de l'erreur de saisie
// ********************************************
function lookingglass_erreur($erreur) // $erreur représente le numéro d'erreur.
{
// ********************************************
// Affichage de titre
// ********************************************
echo
'
<p align="center">
<b>
<font size="5" color="#008000">
Erreur
</font>
</b>
</p>
';
// ********************************************
// Affichage de l'erreur
// ********************************************
echo
'
<p>
';
// ********************************************
// Message personnalisé
// ********************************************
if ($erreur==1)
echo 'Désolé, pour des raisons de sécurité, l\'équipe FrameIP ne peut pas vous permettre d\'utiliser les adresses privées.';
elseif ($erreur==2)
echo 'Désolé, impossible d\'ouvrir la session TCP à destination du routeur.';
// ********************************************
// Fin du script général
// ********************************************
fin_du_script();
}
function fin_du_script()
{
// ********************************************
// Affiche de l'Url
// ********************************************
echo '
<p align="right">
<a target="_blank" href="http://www.frameip.com">
www.frameip.com
</a>
</p>
';
// ********************************************
// Fin de la page Html
// ********************************************
echo
'
</body>
</html>
';
// ********************************************
// Fin du script général
// ********************************************
exit(0);
}
?>
Conclusion
Vennez voir le fonctionnement ici : http://www.frameip.com/lookingglass/
---------- ------------ http://www.frameip.com Pour ceux qui aiment TCPIP ----------------------
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|