Jak korzystając ze skryptu wysłać pinga

Adam Boduch

Pod systemami typu Unix scieżka /bin/ping.

Program'ów można wywołać zwyczajnie korzystając z shella (powłoki) - jego użycie wygląda następująco:

Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
            [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
            [-M mtu discovery hint] [-S sndbuf]
            [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination

Nas właściwie interesują najbardziej parametry -c (ilość wysłanych pakietów) oraz -i (odstęp pomiędzy kolejnym wysłaniem).

Np. wpisanie w terminalu takiej komendy:

ping -c 5 -i 1 www.4programmers.net<

Spowoduje wysłanie 5 pingów w odstępach 1 sekundowych. Oto rezultat działania programu:

PING 4programmers.net (217.11.134.154) from 192.168.64.59 : 56(84) bytes of data.
64 bytes from spike.esolution.pl (217.11.134.154): icmp_seq=1 ttl=54 time=52.1 ms
64 bytes from spike.esolution.pl (217.11.134.154): icmp_seq=2 ttl=54 time=38.2 ms
64 bytes from spike.esolution.pl (217.11.134.154): icmp_seq=3 ttl=54 time=58.9 ms
64 bytes from spike.esolution.pl (217.11.134.154): icmp_seq=4 ttl=54 time=43.2 ms
64 bytes from spike.esolution.pl (217.11.134.154): icmp_seq=5 ttl=54 time=85.5 ms

--- 4programmers.net ping statistics ---

Teraz, aby wysłać pakiet ping ze skryptu PHP, należy użyć funkji exec().

Oto przykład:

$ping = exec("/bin/ping -c 5 www.4programmers.net");

W takim wypadku wysłanych zostanie 5 pingów, a zawartość zmiennej $ping będzie wyglądała następująco:

rtt min/avg/max/mdev = 14.709/31.739/64.134/17.670 ms

Nas interesuje, aby z tego ciagu "wydobyć" średni czas odpowiedzi z serwera. Realizuje to poniższy skrypt:

<?php
$ping = exec("/bin/ping -c 5 www.4programmers.net");

preg_match("/rtt min\/avg\/max\/mdev = (.*)\/(.*)\/(.*)\/(.*) ms/", $ping, $matches);

echo 'Średni czas odpowiedzi: ' . $matches[2];

Niestety w PHP nie da się po prostu stworzyć procesu z parametrami ["-c", 5, "www.4programmers.net"], da się jedynie "imitować" wywołanie powłoki, przez co łatwiej popełnić błąd z formatowaniem - użycie znaków /, \, ", ', :, ; zależnie od systemu operacyjnego.

0 komentarzy