|
|
Looking Glass
1 - Fonctions disponibles
1.1 - Ping
1.2 - Traceroute
1.3 -
Show proc cpu hist
1.4 -
Show mem stat hist
2 - Prise de main Cisco
3 - A propos de
4 - Suivi du développement
4.1 -
Problème restant
4.2 - RoadMap
4.3 -
Suivi du projet
5 - Code source
Cette fonction vous permet de tester la présence de l'adresse IP ou de l'hôte
que vous avez sélectionné. Pour cela, un paquet de
type Icmp
sera envoyé et la réponse vous indiquera le temps d'allez retour. Ceci est
identique à l'utilisation de l'utilitaire Ping de votre
station de travail. Le seul avantage est que vous pouvez l'émettre à partir du
routeur Cisco FrameIP situé sur un autre adressage Internet que vous.
Traceroute, comme la fonction Ping permet de tester la présence de l'adresse IP
ou de l'hôte que vous avez sélectionné. Il indiquera en plus, par quel routeur
il passe pour jour joindre la destination. Pour cela, il envoi un paquet de
type Icmp
avec un Ttl de 1 en attendant le
message de retour du premier routeur. Puis il recommence avec un Ttl positionné
à 2 et ainsi de suite jusqu'à la réponse de la destination finale. Cette
fonction vous indiquera alors le temps de réponse, allez retour, pour chaque
saut effectué.
Cette fonction, présente uniquement pour le fun, vous indiquera l'état du
processeur du routeur qui effectue les fonctions précédentes.
Cette fonction, présente uniquement pour le fun, vous indiquera l'état de la
mémoire du routeur qui effectue les fonctions précédentes.
Le principe est basé sur la prise distante de notre routeur Cisco via un script
Php. Pour cela, le script effectue un telnet routeur.frameip.com 23. Puis
indique le password et entre la commande désiré.

1 - Exécution du script php - Vous surfez sur une page web du site
www.FrameIP.com et vous actionnez un
formulaire Html qui enclenche l'exécution sur le serveur d'un script Php.
2 - Demande d'exécution - Le précèdent script Php ouvre, via la commande
fsockopen, une session Telnet sur notre routeur ISP situé à un autre endroit
d'Internet. Puis passe les différentes commandes correspondantes à votre
sélection dans le précédent formulaire Html.
3 - Ping à destination de vous ou autre - Le routeur Cisco exécute votre
commande comme le Ping, le Traceroute et etc.
|
Version |
Version 1.2 |
|
Date de création |
15 Mars 2004 |
|
Dernière modification |
21 Mars 2004 |
|
Auteur |
_SebF |
Posez vos questions,
remarques, demande d'évolution et retour d'expérience sur le
Forum dédié aux outils
- La commande flush() ne permet
pas d'avoir un affichage temps réel.
- Proposer le choix du nombre de
Ping à effectuer.
- Proposer le temps du Timeout.
|
2004.03.21 |
1.2 |
- Protection contre l'utilisation des adresses privées grâce à la
fonction est_ce_une_ip_privee().
- Affectation du timeout à deux secondes sur l'ouverture de la session TCP. Via
la fonction fsockopen($routeur_ip,23,&$errno,&$errstr,2);
- Indication au routeur d'envoyer toute les données sans --- more --- via la
commande "terminal length 0".
- Ajout de la commande sh proc cpu hist.
- Ajout de la commande sh mem stat hist. |
|
2004.03.20 |
1.1 |
- Création de la fonction réception.
- Création du formulaire html correspondant. |
|
2004.03.19 |
1.1 |
- Solution pour la réception, je passe la socket en mode non bloquant
et je lance la réception permanente jusqu'à la réception du prompt indiquant la
fin de l'exécution de la commande. |
|
2004.03.15 |
1.0 |
- Initiation du projet
- Ouverture de la connexion sur le routeur Cisco via fsockopen().
- Passage du password via fputs().
- Problème de réception avec : while (!feof($fp)) echo fgets($fp, 128); Cela
fonctionne bien sauf avec le routeur Cisco oùu le eof n'est pas detecté. |
|
<?php
//
******************************************** // Nom du
script : lookingglass.php // Auteur :
_SebF@frameIP.com.pas.de.spam // Date de
création : 15 mars 2004 // Version :
1.2 // 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"; //
********************************************** //
Enregistrement du compteur //
********************************************** include
'../variables.php'; $info_compteur1=$ping_ip_demande; $info_compteur2=$choix_de_la_commande; $info_compteur3=str_replace("\n","",$commande_cisco); // Suppression du /n pour
ne pas perturber le fichier compteur $specifiez_le_nom_du_compteur="lookingglass.php"; include
'../compteur.php'; //
***************************** // 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, "Jisudhey56\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); } ?> |
|
|