$_GET['option']) * Correction d'un faute de frappe générant un warning (ligne 429) * Le mode "debug" active désormais error_reporting(E_ALL) [sinon : error_reporting(0);] * * Version 0.4 (01/08/2007) * Nouveaux services disponibles pour le test simple * Affichage dans les statistiques du nombre de ports testés, ouverts et fermés * * Version 0.3 (31/07/2007) * Implémentation du scan UDP * Le timeout par défaut est maintenant fixé à 0.5 secondes (scan simple plus rapide) * Le temps d'exécution maximal du script est désormais paramétrable * Améliorations mineures de l'interface (recadrage sous Firefox) * Les boutons pour lancer un scan sont désactivés pendant un scan, et réactivés à la fin * Correction d'un bug graphique dû à un mauvais échappement d'un caractère * L'affichage de la barre de progression est désormais plus fluide * * Version 0.2 (31/07/2007) * Scan de ports multiples (i.e. 20,30 analyse le port 20 et le port 30). * Scan de plages de ports (i.e. 20-30 analyse tous les ports entre 20 et 30 inclus). * Barre de progression et message "Veuillez patienter" pendant le scan. * * Version 0.1 (30/07/2007) * Implémentation des fonctions de test des ports avec fsockopen. * Interface graphique basée sur les CSS. *********************************************************************************************/ // Propriétés à modifier par l'utilisateur, si nécessaire /* Le mode DEBUG doit-il être activé ? (very verbose...) */ $debug = false; /* Combien de secondes doit durer par défaut l'analyse d'un port ? */ /* [Ne fonctionne pas sur toutes les configurations] */ $default_timeout = 0.5; /* Combien de secondes au maximum peut durer un test avancé ? */ /* ATTENTION : un valeur élevée augmente la charge serveur (conseillé: 5)*/ $max_timeout = 5; /* Pendant combien de temps (en secondes) au maximum le script doit-il s'exécuter ?*/ /* NB: cette valeur supplante la valeur définie dans php.ini */ /* NB: mettre une valeur trop élevée peut augmenter la charge serveur */ /* NB: ne fonctionne pas en safe_mode */ $timelimit = 240; /* 4 minutes */ // NE PAS MODIFIER EN DESSOUS DE CETTE LIGNE !! if($debug) error_reporting(E_ALL); else error_reporting(0); ?> Valhalla::NAT/PortForwarding
Valhalla.fr : Tests de Redirection des Ports
Test Avancé
(Choisissez un port ou une plage de ports)
Port(s) à tester :
Durée du test : seconde(s) (entre 0.1 et )
Protocole(s) :
Test Simple
(Choisissez un service dans la liste)
Liste des services
Aide

Pour utiliser le test simple:

  1. Lancez sur votre ordinateur le service ou le logiciel qui va utiliser le(s) port(s) à analyser
  2. Choisissez un service ou un logiciel dans la liste (p.ex.: aMule ou Azureus)
  3. Cliquez sur le bouton Lancer l'analyse
  4. Les ports correctement redirigés (= ça marche) sont les ports OUVERTS, affichés en VERT.
    Les ports qui ne sont pas correctement redirigés sont les ports FERMÉS, affichés en ROUGE.

Pour utiliser le test avancé:

  1. Lancez sur votre ordinateur le service ou le logiciel qui va utiliser le(s) port(s) à analyser
  2. Choisissez le(s) port(s) à analyser. Vous pouvez choisir:
    • un port
      (p.ex.: 80 => l'analyse portera sur le port 80)
    • une série de ports
      (p.ex.: 70,80,90 => l'analyse portera sur les ports 70, 80 et 90)
    • une plage de ports
      (p.ex.: 70-90 => l'analyse portera sur tous les ports entre 70 et 90 inclus)
    • une combinaison de ports et de plages de ports
      (p.ex.: 70,80-90 => l'analyse portera sur le port 70 et sur tous les ports entre 80 et 90 inclus)
  3. Choisissez le temps de l'analyse:
    • Il s'exprime en SECONDES.
    • Il doit être compris entre 0.1 au minimum et 5 au maximum.
  4. Choisissez le protocole
    • Vous avez le choix entre TCP, UDP et les deux à la fois.
    • ATTENTION: selon les configurations, le protocole UDP peut apparaître ouvert sur tous les ports, bien que ce ne soit pas le cas.
  5. Cliquez sur le bouton Lancer l'analyse

"; echo "document.getElementById('wait').style.display = \"block\";"; echo "document.getElementById('sub-adv').value = '< Analyse en cours... >';"; echo "document.getElementById('sub-spl').value = '< Analyse en cours... >';"; echo "document.getElementById('sub-adv').disabled = true;"; echo "document.getElementById('sub-spl').disabled = true;"; echo ""; /* Il faut vraiment forcer... sinon affichage très aléatoire [ob_flush génère un Warning si le tampon est vide] */ ob_flush(); flush(); ob_flush(); flush(); /* Obtenir l'adresse IP du visiteur */ $ip = $_SERVER['REMOTE_ADDR']; // OPTION 1 => TEST AVANCÉ if(isset($_GET['t']) and $_GET['t'] == "adv") { /* Port à vérifier */ if(!isset($_POST['port'])) $port = "#"; else $port = $_POST['port']; /* Le temps que doit durer un ping, en secondes. */ if(!isset($_POST['timeout'])) $timeout = $default_timeout; else $timeout = $_POST['timeout']; /* Le protocole à analyser */ if(!isset($_POST['protocole'])) $protocol = "TCP"; else $protocol = $_POST['protocole']; } // OPTION 2 => TEST SIMPLE elseif(isset($_GET['t']) and $_GET['t'] == "spl") { /* Port à vérifier */ if(!isset($_POST['service'])) $port = "#"; else $port = $_POST['service']; /* Le temps que doit durer un ping, en secondes. */ $timeout = 1; } else{;} /* Contrôles de sécurité */ /* Le port ne doit pas être # */ if($port == '#') $port = 80; /* Le timeout ne doit pas être supérieur à $max_timeout secondes */ if($timeout>$max_timeout) $timeout = $max_timeout; /* Le timeout ne doit pas être inférieur à 0.1 seconde */ if($timeout<0.1) $timeout = 0.1; /* le timeout doit être une valeur numérique entre 0.1 et $max_timeout */ if(!($timeout<$max_timeout and $timeout>0.1)) $timeout = $default_timeout; /* Exploser les ports avec le délimiteur (,) qui sépare plusieurs ports */ $port = explode(",", $port); /* DEBUG */ if($debug) foreach($port as $key=>$val) echo "[BOUCLE 1] $key => $val
"; /* Ajouter tous les ports des différentes plages dans un tableau */ $k = 0; foreach($port as $i=>$v) { /* Récupérer le minima ($plage[0]) et le maxima ($plage[1]) */ $plage = explode("-", $v); /* Si ce n'est pas une plage, enregistrer le port dans le tableau */ if(count($plage) <= 1) {$ports[$k] = $v; $k++;} /* Si c'est une plage, la parcourir */ else { /* Rentrer tous les ports de la plage dans un tableau*/ for($j = 0 ; $j <= $plage[1]-$plage[0] ; $j++) { $ports[$k] = $plage[0]+$j; $k++; } } } /* DEBUG */ if($debug) foreach($ports as $key=>$val) echo "[BOUCLE 2] $key => $val
"; /* Augmenter le temps d'exécution maximal du script, utile dans le cas d'une grosse plage de ports */ set_time_limit($timelimit); /* Tester le port et afficher le résultat */ foreach($ports as $key=>$port) { /* Variable déterminant si le port est ouvert (true) ou fermé (false) */ /* C'est ici le coeur du programme...*/ /* Attention ! Cette fonction prend du temps (cf. timeout !)*/ $simple = false; if(!isset($protocol)) $protocol = "both"; if($protocol == "TCP") /* Protocole TCP uniquement (par défaut)*/ { $checkport[$port]['TCP'] = fsockopen($ip, $port, $errnum, $errstr, $timeout); $checkport[$port]['UDP'] = "N/A"; } elseif($protocol == "UDP") /* Protocole UDP uniquement */ { $checkport[$port]['UDP'] = fsockopen('udp://'.$ip, $port, $errnum, $errstr, $timeout); $checkport[$port]['TCP'] = "N/A"; } elseif($protocol == "both") /* Les deux protocoles */ { $checkport[$port]['UDP'] = fsockopen('udp://'.$ip, $port, $errnum, $errstr, $timeout); $checkport[$port]['TCP'] = fsockopen($ip, $port, $errnum, $errstr, $timeout); } else /* Test SIMPLE */ { $checkport[$port]['TCP'] = fsockopen($ip, $port, $errnum, $errstr, $timeout); $checkport[$port]['UDP'] = "N/A"; $simple = true; } /*DEBUG*/ if($debug) if($simple) echo "
----------CECI EST UN TEST SIMPLE----------
"; else echo "
----------CECI EST UN TEST AVANCÉ----------
"; /* Mettre à jour la barre de progression */ $t = count($ports); $k = $key; $k++; /* key[1] = 0, il faut lui assigner une valeur sinon pas d'affichage*/ $indice = round(($k*100)/$t); progress($indice); /* DEBUG */ if($debug) echo "[PROGRESS_BAR:INDICE] Indice = $indice ; Passage boucle [$key] ; Port [$port]"; } /* On enlève l'écran "Patientez..." et on réactive les éléments de formulaire */ echo ""; /* Il faut vraiment forcer... sinon affichage très aléatoire */ ob_flush(); flush(); ob_flush(); flush(); //---------------------------------------------- // PHASE 3: affichage -------------------------- //---------------------------------------------- /* Affichage des Stats */ ?> $open) { /* DEBUG */ if($debug) { if(!$open['TCP']) $dbtcp = "FERMÉ"; else $dbtcp = "OUVERT"; if(!$open['UDP']) $dbudp = "FERMÉ"; else $dbudp = "OUVERT"; echo "[BOUCLE 4] port $port TCP => $dbtcp
"; echo "[BOUCLE 4] port $port UDP => $dbudp
"; } /* PREMIÈRE possibilité : on ne teste qu'en TCP */ if(!$simple and $open['UDP'] == 'N/A') { /* Le port est fermé... */ if(!$open['TCP']) { $print = "Le port $port est FERMÉ en TCP"; $opened = false; $closed_ports++; } /* Le port est ouvert... */ else { $print = "Le port $port est OUVERT en TCP"; $opened = true; $opened_ports++; } } /* DEUXIÈME possibilité : on ne teste qu'en UDP */ elseif(!$simple and $open['TCP'] == 'N/A') { /* Le port est fermé... */ if(!$open['UDP']) { $print = "Le port $port est FERMÉ en UDP"; $opened = false; $closed_ports++; } /* Le port est ouvert... */ else { $print = "Le port $port est OUVERT en UDP"; $opened = true; $opened_ports++; } } /* TROISIÈME possibilité : on teste en TCP *et* en UDP */ elseif(!$simple) { /* TCP */ if(!$open['TCP']) { $print = "Le port $port est FERMÉ en TCP"; /* UDP */ if(!$open['UDP']) { $print .= " et en UDP"; $opened = false; $closed_ports++; } else { $print .= " mais OUVERT en UDP"; $opened = false; $closed_ports++; } } /* Le port est ouvert... */ else { $print = "Le port $port est OUVERT en TCP"; /* UDP */ if(!$open['UDP']) { $print .= " mais FERMÉ en UDP"; $opened = false; $closed_ports++; } else { $print .= " et en UDP"; $opened = true; $opened_ports++; } } } /* QUARIÈME possibilité : TEST SIMPLE */ else { /* Le port est fermé... */ if(!$open['TCP']) { $print = "Le port ".$port." est FERMÉ"; $opened = false; $closed_ports++; } /* Le port est ouvert... */ else { $print = "Le port ".$port." est OUVERT"; $opened = true; $opened_ports++; } } /* Doit-on afficher les résultats ?*/ if(isset($opened)) $div = "block"; else $div = "none"; /* Quelle couleur l'affichage ?*/ if($opened) $color = "#C8FFA7"; else $color = "#E9A89B"; ?>
1) { $ds0 = "s"; } else { $ds0 = ""; } if($opened_ports > 1) { $ds1 = "s"; } else { $ds1 = ""; } if($closed_ports > 1) { $ds2 = "s"; } else { $ds2 = ""; } /* Afficher en vert (ouvert) ou en rouge (fermé) ?*/ if($opened_ports > 0) { $c1 = "#3C0"; $b1 = "#C8FFA7"; } else { $c1 = "#F00"; $b1 = "#E9A89B"; } if($closed_ports > 0) { $c2 = "#F00"; $b2 = "#E9A89B"; } else { $c2 = "#3C0"; $b2 = "#C8FFA7"; } echo ""; /* Il faut vraiment forcer... sinon affichage très aléatoire */ ob_flush(); flush(); ob_flush(); flush(); } // fin IF else {;} ?> "; echo "document.getElementById('pourcentage').innerHTML='".$indice."%';"; echo "document.getElementById('progress').style.width='".($indice)."%';"; echo ""; /* Il faut vraiment forcer... sinon affichage très aléatoire */ ob_flush(); flush(); ob_flush(); flush(); } ?>
Copyright © 2007- pour Valhalla.fr - Version 0.5 (19/03/2010) - Distribué sous licence CC 2.0 BY-SA France [Code source]