|
|

Scan
par _SebF
1 - Fonction de Scan
2 - A propos de
3 - Suivi du développement
3.1 -
Problème restant
3.2 - RoadMap
3.3 -
Suivi du projet
4 - Code source
4.1 -
Scan.php
4.2 -
Scan2.php
L'utilitaire Scan permet à la base pour tester les ports
TCP d'un hôte
distant. L'avantage de cette outil est qu'il est en ligne et rend donc son
utilisation anonyme.
Il vous permettra aussi de valider votre sécurité* vu de l'extérieur.
Le plus gros avantage, c'est qu'il est en ligne avec la possibilité de changer
l'adresse IP de destination.
*Sécurité : Test de de présence de port ouvert
Vous trouverez sur le site Authsecu, une
bonne documentation sur les
scan TCP et UDP.
|
Version |
Version 2.1 |
|
Date de création |
07 Novembre 2003 |
|
Dernière modification |
12 Mars 2004 |
|
Auteur |
_SebF |
Posez vos questions,
remarques, demande d'évolution et retour d'expérience sur le
Forum dédié aux outils
- Proposer le choix du timeout et du
temps entre chaque port.
- Afficher le port source utilisé
pour les scan.
- Proposer la saisie d'un nom d'hôte au lieu d'une IP.
- Proposer des list de ports à scanner tel que standard, Plus, All, Backdoor et
etc.
- Tester les fonctions socket_strerror(socket_last_error($socket)), Compatible >
php 4.0.
- Gérer un timeout pour allez plus vite entre chaque port.
- Différencier l'échec si pas de réponse ou si réponse indiquant le port est
fermé.
|
2004.03.12 |
V2.1 |
- Vérification des champs port_destination et port_source si
les données saisies sont bien des nombres. Pour cela, j'utilise la
fonction is_numeric(), merci loquace. |
|
2003.11.29 |
V2.0 |
- Résolution du problème d'affichage d'un coup. Pour cela, la
boucle lance x fois un Document.Write lançant un scan d'un seul port.
- Création de la fonction Javascript nouvelle_page() permettant de lancer
une nouvel fenêtre redimensionnée à partir d'une Form. Merci à Seb| et à
Sagamore pour leur coup de main.
- Implantation d'un sécurité afin de protéger le script contre les
utilisations.
- Limitation du scan à 20 ports simultannés.
- Demande au browser de ne pas mettre en cache afin d'éviter qu'une
seconde demande de scan identique soit non
effectuée. |
|
2003.11.25 |
V1.2 |
- Validation poussée des champs port_de_début et port_de_fin.
- Résolution du problème Warning: fsockopen() en ajoutant error_reporting(0);
permettant de ne pas afficher les erreurs et warning. |
|
2003.11. |
V1.1 |
- Migration sur Ovh => Warning: fsockopen(): unable to
connect to quand le port est fermé.
- Intégration de champ timeout qui fonctionne désormais, car Ovh tourne
sur une version PHP 4.x. |
|
2003.11.18 |
V1.1 |
- Rattrapage du retard sur les commentaires dans le script.
- Passage de la gestion des erreurs dans la fonction erreur($erreur,$opentable).
- Vérification supplémentaire du champ IP pour éviter la saisie du style
.0 qui donnait 0.0.0.0.
- Passage du script dans son répertoire. |
|
2003.11.07 |
V1.1 |
- Vérification des champs de saisie. |
|
2003.11.07 |
V1.0 |
- Création de la page de saisie.
- Test d'un port.
- Choix et test d'une plage. |
Ce script est divisé en deux
fichiers afin d'obtenir un affichage fluide. Cela permet de ne pas bloquer
l'affichage en attendant les réponses des différents ouverture de
session Tcp.
|
<?
// ********************************************
// Nom du script : scan.php
// Auteur : _SebF AT frameIP.com
// date de création : 07 Novembre 2003
// version : 2.1
// Licence : Ce script est libre de toute utilisation.
// La seule condition existante est de faire référence au site http://www.frameip.com
afin de respecter le travail d'autrui.
// ********************************************
// ********************************************
// Affichage de l'entete 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 Scan</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="scan, online, outil, tcp, udp,
port, destination, ouvert ferme, session, valider, validation, securite">
<META NAME="DESCRIPTION" CONTENT="Frameip, pour ceux qui
aiment IP - Script Scan">
<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 variables POST
// **********************************************
$scan_adresse_ip = $_POST['ipaddress'];
$scan_port_de_depart = $_POST['port1'];
$scan_port_de_fin = $_POST['port2'];
// **********************************************
// Enregistrement du compteur
// **********************************************
include '../variables.php';
$info_compteur1=$scan_adresse_ip;
$info_compteur2=$scan_port_de_depart;
$info_compteur3=$scan_port_de_fin;
$specifiez_le_nom_du_compteur="scan.php";
include '../compteur.php';
// ********************************************
// Vérification du champ IP
// ********************************************
if (empty($scan_adresse_ip))
scan_erreur(1);
if ($scan_adresse_ip==0)
scan_erreur(4);
if (ip2long($scan_adresse_ip)==-1) // Vérification de la conformité de
l'IP
scan_erreur(4);
else
{
// Transforme les saisies tel que 10.10..4 en 10.10.0.4
$inetaddr=ip2long($scan_adresse_ip);
$scan_adresse_ip=long2ip($inetaddr);
}
// ********************************************
// Vérification des champs ports
// ********************************************
if (empty($scan_port_de_depart))
scan_erreur(2);
if (empty($scan_port_de_fin))
scan_erreur(3);
if (is_numeric($scan_port_de_depart)==false) // Si ce n'est pas un
nombre
scan_erreur(10);
if (is_numeric($scan_port_de_fin)==false) // Si ce n'est pas un nombre
scan_erreur(11);
if ($scan_port_de_depart<=0)
scan_erreur(5);
if ($scan_port_de_fin>65535)
scan_erreur(6);
if ($scan_port_de_depart>$scan_port_de_fin)
scan_erreur(7);
if ($scan_port_de_fin-$scan_port_de_depart>20)
scan_erreur(9);
// **********************************************
// Affichage du titre
// **********************************************
echo '
<p class="titre-principal">
Scanner de ports TCP
</p>
<BR>
<p class="chapitre---texte-de-niveau-1">
Voici les résultats du Scan de l\'adresse IP '.$scan_adresse_ip.'
entre le port '.$scan_port_de_depart.' et '.$scan_port_de_fin.'
<BR>
<BR>
';
// **********************************************
// Boucle lancant les appels du script de scan port par port
// **********************************************
for ($i=$scan_port_de_depart;$i<$scan_port_de_fin+1;$i++)
{
echo '<script src="scan2.php?host='.$scan_adresse_ip.'&port='.$i.'"></script>';
}
echo '</p>';
// ********************************************
// Fin du script général
// ********************************************
fin_du_script();
// ********************************************
// Fonction de gestion des erreurs
// ********************************************
function scan_erreur($erreur) // $erreur représente le numéro d'erreur.
{
// ********************************************
// Affichage de titre
// ********************************************
echo
'
<p class="titre-principal">
Erreur
</p>
';
// ********************************************
// Affichage de l'erreur
// ********************************************
echo '<p class="chapitre---texte-de-niveau-1">';
// ********************************************
// Message personnalisé
// ********************************************
if ($erreur==1)
echo 'Le Scan ne peux pas avoir lieu car le
champ IP est vide.';
elseif ($erreur==2)
echo 'Le Scan ne peux pas avoir lieu car le
champ Port de début est vide.';
elseif ($erreur==3)
echo 'Le Scan ne peux pas avoir lieu car le
champ Port de fin est vide.';
elseif ($erreur==4)
echo 'Le Scan ne peux pas avoir lieu car le
champ IP ne contient pas d\'adresse valide.';
elseif ($erreur==5)
echo 'Le Scan ne peux pas avoir lieu car le
champ Port de début est inférieur ou égale à 0.';
elseif ($erreur==6)
echo 'Le Scan ne peux pas avoir lieu car le
champ Port de fin est suppérieur à 65535.';
elseif ($erreur==7)
echo 'Le Scan ne peux pas avoir lieu car le
champ Port de début est suppérieur au port de fin.';
elseif ($erreur==9)
echo 'Le Scan ne peux pas avoir lieu car vous
demandez de scanner plus de 20 ports.';
elseif ($erreur==10)
echo 'Les donnees du champ port de depart ne
reprensente pas un nombre.';
elseif ($erreur==11)
echo 'Les donnees du champ port de fin ne
represente pas un nombre.';
// ********************************************
// Fin du script général
// ********************************************
echo '<br><br>';
fin_du_script();
}
function fin_du_script()
{
// ********************************************
// Affiche de l'Url
// ********************************************
echo
'
<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);
}
?> |
|
<?
// ********************************************
// Nom du script : scan2.php
// Auteur : _SebF AT frameIP.com
// date de création : 29 Novembre 2003
// version : 2.1
// Licence : Ce script est libre de toute utilisation.
// La seule condition existante est de faire référence au site http://www.frameip.com
afin de respecter le travail d'autrui.
// ********************************************
// **********************************************
// Interdiction de la mise en cache
// **********************************************
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
// **********************************************
// Suppression des warning et erreurs si la session tcp ne monte pas
// **********************************************
error_reporting(0);
// **********************************************
// Ouverture de session tcp
// **********************************************
$socket=fsockopen($host, $port, &$errno, &$errstr, 1);
if ($socket)
{
// **********************************************
// La session s'est bien ouverte
// **********************************************
$nombre_de_port_ouvert++;
fclose($socket);
echo "document.write('<BR>Le port TCP $port est ouvert');";
}
else
// **********************************************
// La session ne s'est pas ouverte
// **********************************************
echo "document.write('<BR>Le port TCP $port est fermé $nombre_de_port_scanne');";
?> |
|
|