Aide et info pour création code php

Bonjour,

Je fais appel aux personnes qui connaisse bien php mais orienter serveur me m'explique

j'aimerais créer une petit interfaces qui permet de lister les ports TCP/UDP en PHP

en somme faire du dnslookup / du ping / et scann de port.

merci de votre aide.

2 réponses

  1. Salut,

    Voici un petit script qui fait à peu près ce que tu demandes :

    // Récupération du nom depuis l'adresse IP
    $hostname = gethostbyaddr("8.8.8.8");
    echo $hostname . "\n";
    
    // Récupération de l'adresse ip depuis le nom
    $hostip = gethostbyname("www.google.fr");
    echo $hostip . "\n";
    
    // Ping avec commande du système (Pour Linux, à adapter si le système est différent)
    function ping($host)
    {
            exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
            return $rval === 0;
    }
    if (ping("8.8.8.8")) {
    	echo "Liaison OK\n";
    } else {
    	echo "Liaison KO\n";
    }
    
    // Scanner de ports
    $host = "8.8.8.8";
    $ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);
    	
    $results = array();
    foreach($ports as $port) {
    	if($pf = @fsockopen($host, $port, $err, $err_string, 1)) {
    		$results[$port] = true;
    		fclose($pf);
    	} else {
    		$results[$port] = false;
    	}
    }
     
    foreach($results as $port=>$val)	{
    	$prot = getservbyport($port,"tcp");
    	echo "Port $port ($prot): ";
    	if($val) {
    		echo "OK\n";
    	}
    	else {
    		echo "Inaccessible\n";
    	}
    }
    1. oui il est bien ficeler effectivement alors j'aurais une question est-il possible de faire la même chose mais en donnant une ip précise ?

      exemple si la personne veut lister les ports ouvert de son réseau
    2. Sur le script il suffit de changer 8.8.8.8 par l'adresse que tu veux scanner.
    3. oui , je voudrais faire ça si vous voulez mais, avec un formulaire ou ont choisie l'ip dans celui-ci.
    4. Il suffit de faire un formulaire qui pointe sur ce fichier comme par exemple :

      formulaire.html
      <form method="POST" action="scanner.php">
      <input name="adresse" type="text">
      <button type="submit">Scanner</button>
      </form>

      scanner.php
      $host = $_POST["adresse"];
      $ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);
      	
      $results = array();
      foreach($ports as $port) {
      	if($pf = @fsockopen($host, $port, $err, $err_string, 1)) {
      		$results[$port] = true;
      		fclose($pf);
      	} else {
      		$results[$port] = false;
      	}
      }
       
      foreach($results as $port=>$val)	{
      	$prot = getservbyport($port,"tcp");
      	echo "Port $port ($prot): ";
      	if($val) {
      		echo "OK\n";
      	}
      	else {
      		echo "Inaccessible\n";
      	}
      }
      

      Après il suffit de rajouter une vérification sur la variable $host pour vérifier que l'ip est correct.
    5. J'ai procédé ainsi et aimerais le perfectionner :


      <table width="800" align="center">
      <?php
      // Récupération du nom depuis l'adresse IP
      // $hostname = gethostbyaddr("8.8.8.8");

      // Récupération de l'adresse ip depuis le nom
      // $hostip = gethostbyname("www.google.fr");

      $secu_1 = mysql_real_escape_string($hostname);
      $secu_2 = mysql_real_escape_string($hostip);
      $secu_3 = mysql_real_escape_string($host);

      $hostname = $_POST["hostname"];
      $hostip = $_POST["hostip"];

      echo '<tr>';
      echo '<td>'.$hostname.'</td>';
      echo '<td>'.$hostip.'</td>';
      echo '</tr>';

      // Ping avec commande du système (Pour Linux, à adapter si le système est différent)
      function ping($host)
      {
      exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
      return $rval === 0;
      }
      if (ping("8.8.8.8")) {
      echo '<tr>';
      echo '<td>Liaison OK</td>';
      echo '<td> </td>';
      echo '</tr>';
      echo '<br/>';
      echo '<br/>';
      }
      else
      {
      echo '<br/>';
      echo '<br/>';
      echo '<tr>';
      echo '<td>Liaison KO</td>';
      echo '<td> </td>';
      echo '</tr>';
      }

      // Scanner de ports
      $host = $_POST["adresse"];
      $ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);
      $results = array();
      foreach($ports as $port) {
      if($pf = @fsockopen($host, $port, $err, $err_string, 1)) {
      $results[$port] = true;
      fclose($pf);
      } else {
      $results[$port] = false;
      }
      }
      foreach($results as $port=>$val) {
      $prot = getservbyport($port,"tcp");
      echo '<tr>';
      echo "<td>Port $port ($prot):</td>";
      if($val) {
      echo '<td>OK</td>';

      }
      else {
      echo '<td>Inaccessible</td>';
      echo '</tr>';
      }
      }
      ?>
      </table>
      <br/>
      <form method="POST" action="scan-tools.php">
      <table width="800" align="center">
      <tr>
      <td>Hostname</td>
      <td><input name="hostname" type="text"></td>
      </tr>
      <tr>
      <td>URL :</td>
      <td><input name="adresse" type="text"></td>
      </tr>
      <tr>
      <td>IP cible :</td>
      <td><input name="hostip" type="text"></td>
      </tr>
      <tr>
      <td> </td>
      <td> </td>
      </tr>
      <tr>
      <td> </td>
      <td><button type="submit">Scanner</button></td>
      </tr>
      </table>
      <br/>
      </form>


      Problème que je rencontre sont les suivants ligne 21 :
      --------------------------------------------------------------------------

      Warning: exec() has been disabled for security reasons in www/b14060d7807053e73b77f0ca311ce807/scan-tools.php on line 21

      Qui correspond à cette ligne :
      exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
      return $rval === 0;

      ensuite j'ai remarquer que j'avais tout le temps le message :
      Liaison KO en haut du tableau.

      j'aimerais y ajouter des fonctionnalités avancer si c'est possible.
  2. Salut Noël !
    Toujours ce souci avec l'erreur Warning: exec() has been disabled for security reasons in
    Essaye avec d'autre fonctions comme passthru(), shell_exec(), system() et proc_open() au lieu de exec ;
    Sur certains serveurs pas trop regardant ça marche comme par magie ;-)
    1. mon serveur est sur infomaniak et ça ne fonctionne pas