IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier si une IP est connectée (ping) sous serveur Kwartz


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Dennis Nedry
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Points : 88
    Points
    88
    Par défaut Vérifier si une IP est connectée (ping) sous serveur Kwartz
    Bonjour,

    Je travaille actuellement dans un établissement scolaire utilisant un serveur Kwartz. Je cherche une fonction en php qui pourrait m'indiquer si telle ou telle IP est bien raccordée au réseau. Je n'ai plus touché de PHP depuis 5 ans, donc je suis un peu rouillé... J'ai testé pas mal de solutions, mais aucune ne me convient...

    Avant tout, La méthode @fsockopen sur le port 80 fonctionne très bien pour les imprimantes, celles-ci ayant une interface web, mais ne marche pas du tout pour les ordinateurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    if (!$socket = @fsockopen("IP.A.TESTER", 80, $errno, $errstr, 30))
    {
      echo "<font color='red'><strong>Offline!</strong></font>";
    }
    else 
    {
      echo "<font color='green'><strong>Online!/strong></font>";
       fclose($socket);
    }
    ?>

    La fonction socket_create() n'est pas permise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
            function ping($host, $timeout = 1) {
                    /* ICMP ping packet with a pre-calculated checksum */
                    $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
                    $socket  = socket_create(AF_INET, SOCK_RAW, 1);
                    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
                    socket_connect($socket, $host, null);
     
                    $ts = microtime(true);
                    socket_send($socket, $package, strLen($package), 0);
                    if (socket_read($socket, 255))
                            $result = microtime(true) - $ts;
                    else    $result = false;
                    socket_close($socket);
     
                    return $result;
            }
     
    ping("172.16.113.1");
    Warning: socket_create() [function.socket-create]: Unable to create socket [1]: Operation not permitted in /home/kwartz/www/bidon/index.php on line 14


    De ce fait, j'essaye la fonction exec, mais elle tourne en rond, sans rien réussir à m'afficher...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     $ping_ex = exec("ping 172.16.113.1", $ping_result, $pr);
     
    if (count($ping_result) > 1){
    echo 'online';
    } else {
    echo 'offline';
    }
    J'avoue ne plus trop bien savoir où chercher. la fonction @fsockopen me semble être l'idéale dans mon cas, mais il me faudrait savoir si il existe un port toujours actif sur un ordinateur...

    Encore merci d'avance!

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ping = `ping -n 1 -w 100 XXX.XXX.XXX.XXX`;
    var_dump($ping);
    ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier Avatar de Dennis Nedry
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Points : 88
    Points
    88
    Par défaut
    Grunk, il me donne:

    Warning: shell_exec() has been disabled for security reasons in /home/kwartz/www/bidon/index.php on line 134
    NULL
    J'ai aussi essayé cette méthode, récupérée de ce site:
    http://forum.ovh.com/showthread.php?t=13582

    J'ai désactivé la fonction mail, bien sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    // Nom de la machine à pinger
    $host = "172.16.0.27";
     
    // Le ping va durer 10s maximum
    $pings = 10;
     
    // Les paquets doivent être renvoyés en moins de 100ms
    // (mettez une grosse valeur si le temps de réponse importe peu)
    $timeout = 100;
     
    // Date et Heure actuelles
    $date = date("d/m/Y à H:i:s");
     
    // *********************************************************************
     
     
    // On pingue la machine "$host". L'exécution dure maximum : "$pings" secondes
    exec( "ping $host -w $pings", $exec );
     
    //juste pour voir le contenu de $exec:
    //echo $exec;
    print_r($exec);
    // La commande me retourne juste Array()
     
     
    // On traite chaque ligne de réponse
    foreach ( $exec as $line )
    {
    echo $line;
    echo '<br>';
    	// Si l'adresse de la machine est incorrecte
    	if ( strpos($line,'unknown host')!==false )
    	{
    		$nohost = true;
    	}
    	// Si la machine existe mais ne répond pas
    	elseif ( strpos($line,'Destination Host Unreachable')!==false )
    	{
    		$died = true;
    	}
    	// Si la machine répond alors on récupère le temps de réponse
    	elseif ( preg_match("/time=(\d+)/",$line,$ms) )
    	{
    		// Si la machine met plus de "$timeout" ms à répondre ...
    		if ( $ms[1] > $timeout )	$error++;
    		// Sinon ...
    		else			$noerror++;
    	};
    };
     
    // Si l'adresse de la machine est incorrecte
    if ( $nohost )
    {
    	$message = "$date : $host n'existe pas ou plus : \"Unknown Host\" !\n";
    }
    // Si la machine existe mais ne répond pas
    elseif ( $died )
    {
    	$message = "$date : $host n'a pas répondu : \"Destination Host Unreachable\" !\n";
    }
    // Si à plus de 5 reprises, la réponse du ping a dépassé les "$timeout" ms.
    elseif ( $error > 5 )
    {
    	$message = "$date : $host a répondu en plus de $timeout ms, à $error reprises !\n";
    }
    // Si la machine a reçu le ping mais n'a pas répondu (par exemple en cas de firewall)
    elseif ( !$error && !$noerror )
    {
    	$message = "$date : $host a été joint mais n'a pas répondu !\n";
    };
     
      echo $message;
    Le résultat, contenu dans $exec est simplement "Array()"...

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    La réponse est dans l'erreur retournée par mon bout de code :

    Tu n'as pas le droit d’exécuter des commandes système avec ta configuration de PHP.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de Dennis Nedry
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Points : 88
    Points
    88
    Par défaut
    Donc exit la fonction ping et les commandes système. Existerait-il une autre alternative? Un port, autre que le 80, qui serait actif sur un ordi en temps normal, et qui pourrait ainsi me permettre d'utiliser @fsockopen, par exemple?

Discussions similaires

  1. Comment vérifier qu'une date est nulle
    Par stressy dans le forum Access
    Réponses: 7
    Dernier message: 09/12/2005, 15h41
  2. vérifier qu'une valeur est numérique
    Par kopofb dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/11/2005, 14h02
  3. Détecter si une souris est connecté...
    Par Foub dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 31/07/2005, 20h41
  4. Réponses: 15
    Dernier message: 27/04/2005, 10h41
  5. Vérifier si une form est ouverte
    Par nivet dans le forum Langage
    Réponses: 6
    Dernier message: 23/11/2004, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo