Partage
  • Partager sur Facebook
  • Partager sur Twitter

retour ping adresse IP Privée en PHP

site web pour montrer connexion ou non d'appareils de caisses avec IP

    14 février 2020 à 10:57:58

    Bonjour tout le monde, je suis bloqué depuis une semaine maintenant sur une problématique bien précise. Je suis en stage en tant que Dev Junior et j'ai comme mission de créer un site web qui est une sorte de moniteur de connexion de serveurs des différents magasins (je suis en stage au siège informatique de la société en question qui détient plusieurs magasins).

    Je code en PHP, et j'ai trouvé de nombreuses fonctions devant me permettre de pinger ces adresses ip privées mais je n’obtient pas de retour "OK". 

    J'ai posté ma question sur le forum PHP mais on m'a dit d'essayer de venir prendre de l'aide sur la partie réseau. Pour schématiser en gros ma page function.php doit me donner un résultat comme ceci -->

    Sauf que pour l'instant lorsque je mets les adresses IP des magasins en questions cela m'affiche hors ligne, hors en testant l'invité de commande avec la commande Windows ping IP ca fonctionne très bien.

    Si quelqu'un s'y connait bien à la fois en réseau et en PHP je suis preneur merci :)

    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2020 à 16:44:25

      Bonjour,

      Sans code difficile de dire quoi que ce soit.

      C'est des paquets ICMP echo request que tu envoies? Directement avec des sockets en PHP (https://www.php.net/manual/en/book.sockets.php) ou avec des appels systèmes?

      Es-tu sur que tu es autorisé à réaliser ce type d'opération?

      EDIT: j'ai repris le code de ton sujet sur le fofo PHP et je l'ai adapté à ma sauce (Linux avec postgresql), j'ai un code tout à fait fonctionnel:

      <?php
      	$host		= "host = 127.0.0.1";
      	$port		= "port = 5432";
      	$dbname		= "dbname = testdb";
      	$credentials	= "user = test password=test";
      
      	$db	= pg_connect( "$host $port $dbname $credentials" );
      
      	if(!$db) {
      		echo "Error : Unable to open database\n";
      	} else {
      		echo "Opened database successfully\n";
      	}
      
      	$sql =<<<EOF
      		SELECT * FROM magasins;
      EOF;
      
          	$ret = pg_query($db, $sql);
      	if(!$ret) {
      		echo pg_last_error($db);
      		exit;
      	}
          	while($row = pg_fetch_row($ret)) {
      ?>
                                      <tr>
                                          <td><?php echo $row[0]; ?></td>
                                          <td><?php echo $row[1]; ?></td>
      <?php
              exec("ping -c 1 ". $row[1], $output, $status);
      	if($status == 0) {
      		$message = "OUI";
      	} else {
      		$message = "NON";
      	}
      ?>
                                          <td><span style="color: red; font-weight: bold;"><?php echo $message; ?></span></td>
                                      </tr>
      <?php
      	}
      	pg_close($db);
      ?>
                                  </tbody>
                              </table>
                          </div>
                      </div>
                  </div>
              </div>
          </body>
      </html>

      Note que j'utilise le code de retour de la commande ping plutôt que sa sortie. C'est beaucoup plus fiable que de parser la sortie.

      Et ma table magasins ressemble à ça

      testdb=# SELECT * FROM magasins;
       nom_mag |     addr_ip     
      ---------+-----------------
       mag1    | 8.8.8.8
       mag2    | 127.0.0.1
       mag3    | 1.1.1.1
       mag4    | 192.168.255.254
      (4 rows)
      

      -
      Edité par KoaTao hier à 14:55

      • Partager sur Facebook
      • Partager sur Twitter
        Il y a 42 minutes

        Merci beaucoup KaoTao pour ta réponse, en fait avant de reprendre mon code avec ma table SQL, je voulais tester avec la page function.php séparément.

        Apparemment j'ai essayé avec des adresses IP des collègues et ca a l'air de fonctionner, seulement j'ai l'impression qu'il y a un petit soucie avec le refresh, ca reste vert continuellement... En fait j'ai l'impression qu'il suffit que je mette le port 80 pour que cela passe en ligne...

        Voici le code de ma page function.php:

        <?php
        
        $ipmagasin1= "ip1";
        $portmagasin1 = "80";
        $ipgmagasin2 = "ip2";
        $portmagasin2 = "80";
        $ipgmagasin3 = "ip3";
        $portmagasin3 = "80";
        $ipgmagasin4 = "ip4";
        $portmagasin4 = "80";
        
        function magasin1($ip, $port)
        {
            error_reporting(0);
            $test = fsockopen($host, $port, $errno, $errstr, 3);
            if (!$test) {
                echo "<b style=\"color:red\">Hors Ligne</b>";
            } else {
                echo "<b style=\"color:green\">En Ligne</b>";
            }
        }
          function magasin2($ipgmod, $portgmod)
          {
              error_reporting(0);
              $sock = fsockopen("udp://".$ipgmod, $portgmod, $num, $error, 3);
              if (!$sock) {
                  echo("<b style=\"color:red;\">Hors Ligne</b>");
              }
              if ($sock) {
                  echo("<b style=\"color:green;\">En Ligne</b>");
                  fclose($sock);
              }
          }
          function magasin3($ipgmod, $portgmod)
          {
              error_reporting(0);
              $sock = fsockopen("udp://".$ipgmod, $portgmod, $num, $error, 3);
              if (!$sock) {
                  echo("<b style=\"color:red;\">Hors Ligne</b>");
              }
              if ($sock) {
                  echo("<b style=\"color:green;\">En Ligne</b>");
                  fclose($sock);
              }
          }
          function magasin4($ipgmod, $portgmod)
          {
              error_reporting(0);
              $sock = fsockopen("udp://".$ipgmod, $portgmod, $num, $error, 3);
              if (!$sock) {
                  echo("<b style=\"color:red;\">Hors Ligne</b>");
              }
              if ($sock) {
                  echo("<b style=\"color:green;\">En Ligne</b>");
                  fclose($sock);
              }
          }
        
        echo 'Heure du test : ',date('d/m/Y H:i:s'),'<br />';
        echo 'Status connexion magasin1 : ',magasin1($ipmagasin1, $portmagasin1),'<hr/>';
        echo 'Status connexion magasin2 : ',magasin2($ipmagasin2, $portmagasin2),'<hr/>';
        echo 'Status connexion magasin3 : ',magasin3($ipmagasin3 ,$portmagasin3),'<hr/>';
        echo 'Status connexion magasin4 : ',magasin4($ipmagasin4, $portmagasin4),'<hr/>';
        
        function console_log( $data ){
          echo '<script>';
          echo 'console.log('. json_encode( $data ) .')';
          echo '</script>';
        } 
        
        ?>

        Et voici le résultat de ce code:

        Si quelqu'un peut m'aider dessus, je vais essayer de reprendre ta logique Kaotao pour ma page index.php, concernant l'autorisation oui en principe depuis mon poste je peux pinger les serveurs des magasins.

        -
        Edité par Seijuro94 il y a 41 minutes

        • Partager sur Facebook
        • Partager sur Twitter

        retour ping adresse IP Privée en PHP

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown