Hi.
Segue duas funções. Uma usa socket_send() e a outra socket_sendto(). :)
Nem sei se funciona como deveria, mas aparentemente funciona, LOL.
<?php
function ping($host){
$suck = socket_create(AF_INET, SOCK_RAW, getprotobyname("ICMP"));
$stime = array_sum(explode(" ", microtime()));
socket_sendto($suck, "\x08\x00\x19\x2f\x00\x00\x00\x00ping", 12, 0x4, $host, 4242);
socket_read($suck, 512);
$etime = array_sum(explode(" ", microtime()));
socket_close($suck);
$time = $etime - $stime;
if(!is_float($time))
return false;
else
return substr($time, 3, 2); //miliseconds
}
echo ping("www.darkers.com.br");
?>
E a outra:
<?php
abstract class Sender
{
abstract public function main($host);
protected function ping($host){
$sk = socket_create(AF_INET, SOCK_RAW, getprotobyname("ICMP"));
socket_connect($sk, $host, 0);
$stime = array_sum(explode(" ", microtime()));
socket_send($sk, "\x08\x00\x19\x2f\x00\x00\x00\x00ping", 12, 0);
socket_read($sk, 512);
$etime = array_sum(explode(" ", microtime()));
$time = $etime - $stime;
socket_close($sk);
if(!is_float($time))
return false;
else
return substr($time, 3, 2); //miliseconds
}
}
/*
class Ping extends Sender {
[...]
*/
?>
[]'s