Publié le 25/01/2012
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Executer un ping sur une adresseip ou un domaine

La commande Ping est une opération de base sur un réseau informatique. Son principale but est de tester la connexion vers une machine distante en lui envoyant une requête ICMP puis d'attendre la réponse du périphérique.

Executer un ping sur un IP ou un domaine

Tester une machine distante, calculer le temps de réponse, vérifier le nom de domaine ... ces taches sont réalisées à partir de la commande ping(). Une solution consiste à ouvrir une adresse avec fsockopen() et de tester le succès de l'opération. Pour l'exemple de class Ping écrite en PHP, nous avons préféré exécuter la commande au travers du serveur puis analyser le résultat.
<?php
/**
 * Executer un ping sur un IP ou un domaine
 * @author fobec 2011
 */
class ServerPing {
    /** Buffer de sortie */
    private $output=array();
    private $avg=0;
    private $min=0;
    private $max=0;
 
    /**
     * Envoyer la commande ping
     * @param string $server nom de domaine ou ip
     * @param int $repeat nombre de test
     */
    public function send($server, $repeat) {
        if ($repeat==0) {
            throw new Exception("repeat cant be 0 !!!");
        }
 
        /**
         * Lancer le ping sur le serveur
         */
        $cmd='ping -c '.$repeat.' '.$server;
        exec($cmd, $this->output);
        /**
         * Extraire les temps de réponse
         * @todo: utuliser les expressions régulières
         */
        if (count($this->output)>2) {
            $toparse=$this->output[count($this->output)-1];
//example rtt min/avg/max/mdev = 8.198/8.291/8.351/0.127 ms
            if (strpos($toparse, 'rtt min/avg/max/mdev =')!==false) {
                $str=trim(substr($toparse, 23));
                $vals=explode("/",$str);
 
                if (count($vals)>=4) {
                    $this->min=$vals[0];
                    $this->max=$vals[2];
                    $this->avg=$vals[1];
                }
            }
        }
    }
 
    /**
     * Afficher le détail du ping
     * @return string résultat du ping
     */
    public function getOutput() {
        return implode("\n", $this->output);
    }
 
    /**
     * Connaitre l'état du serveur
     * @return boolean réponse du serveur
     */
    public function isAlive() {
        if ($this->avg==0) {
            return false;
        }  else {
            return true;
        }
    }
    /**
     * @return int temps min. de réponse
     */    
    public function getMin() {
        return $this->min;
    }
    /**
     * @return int temps max. de réponse
     */
    public function getMax() {
        return $this->max;
    }
 
    /**
     * @return int temps moyen de réponse
     */
    public function getAverage() {
        return $this->avg;
    } 
}
?>

Exemple 1: connaitre l'état d'un serveur distant

Voici comment tester la connexion à un hôte distant. A partir d'une adresse IP ou d'un nom de domaine, ServerPing permet de savoir si le serveur répond aux requêtes.
<?php
require_once './ServerPing.php';
$serverPing=new ServerPing();
$serverPing->send("www.unsitequiexistepas.com", 1);
if ($serverPing->isAlive()) {
    echo "le serveur est disponible";
} else {
    echo "le serveur est down !!!";
}
?>

Exemple 2: mesure le temps de réponse d'un serveur

Voici comment mesurer le temps qui s'écoule entre une requête et la réception du message par le serveur. L'état du trafic internet, le FAI et la charge du serveur peuvent influer sur les mesures.
<?php
require_once '/ServerPing.php';
 
$serverPing=new ServerPing();
$serverPing->send("www.google.com", 5);
if ($serverPing->getAverage()<100) {
    echo $serverPing->getAverage()." ms - le serveur est en forme !!!";
} else {
    echo $serverPing->getAverage()." ms - he serveur réveille toi !!!";
}
?>

Exemple 3: afficher le détail d'un ping

Voici comment afficher le résultat d'une série de 5 ping, de la même manière que par exemple sous DOS avec la commande ping.
<?php
require_once './ServerPing.php';
 
$serverPing=new ServerPing();
$serverPing->send("www.facebook.com", 5);
echo "Detail du ping <br>---------------------------<br><pre>".$serverPing->getOutput()."</pre>";
?>

Résultat du ping:
PING www.facebook.com (66.220.158.32) 56(84) bytes of data.
64 bytes from www-13-01-ash4.facebook.com (66.220.158.32): icmp_seq=1 ttl=246 time=89.8 ms
64 bytes from www-13-01-ash4.facebook.com (66.220.158.32): icmp_seq=2 ttl=246 time=89.4 ms
64 bytes from www-13-01-ash4.facebook.com (66.220.158.32): icmp_seq=3 ttl=246 time=89.2 ms
64 bytes from www-13-01-ash4.facebook.com (66.220.158.32): icmp_seq=4 ttl=246 time=89.4 ms
64 bytes from www-13-01-ash4.facebook.com (66.220.158.32): icmp_seq=5 ttl=246 time=89.4 ms
--- www.facebook.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 89.269/89.505/89.847/0.187 ms

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
25/01/2012
Visualisation
vu 8041 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Alpcom dans java

Salut , juste signaler une petite faute de frappe dans mouseDragged
ce n'est pas int y = p.y - newPos.x;
int y = p.y - newPos.y; !! des comportements curieux apparaissaient sinon merci beaucoup...

Publié par jmc dans CMS

Autre lien de chargement : http://www.fobec.com/protec/logiciels2/encadre.php3?id_log=217&cat=VBureautique

Publié par bakouz dans java

Bonjour Axel,
je suis tombe sur ton site un peu par hasard.
Hasard car je ne le connaissais pas jusqu'a maintenant, et non du hasard car c'est exactement ce genre de class que je recherchais. !...

Publié par hilflo dans tuto

Pour Romaingineer, essaye d'aller voir dans le fichier functions.php dans ton theme, tu dois avoir des functions wp_enqueue_style ou wp_enqueue_script, c'est la que tu pourras faire des modifs

Publié par y__fe dans java

Impeccable merci !