note 120174 added to function.socket-create
| From: | Sakrizz | Date: | Wed, 16 Nov 2016 10:46:29 +0000 |
| Subject: | note 120174 added to function.socket-create | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-207116@lists.php.net to get a copy of this message | ||
Here's a solution for icmpv6 ping with php, dropping it here in case if someone has problems
with icmpv6 with php.
<?php
$host = "2a03:2880:f11b:83:face:b00c:0:25de";
$timeout = 100000;
$count = 3;
echo "Latency: ". round(1000 * pingv6($host,$timeout,$count),5) ." ms \n";
function pingv6($target,$timeout,$count) {
echo "target is ipv6 address, ". getprotobyname('ipv6-icmp'). "
\n";
/* create the socket, the last '1' denotes ICMP */
$socket = socket_create(AF_INET6, SOCK_RAW, getprotobyname('ipv6-icmp'));
/* set socket receive timeout to 1 second */
$sec=intval($timeout/1000);
$usec=$timeout%1000*1000;
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>$sec,
"usec"=>$usec));
/* socket package parameters */
$type = "\x80";
$seqNumber = chr(floor($i/256)%256) . chr($i%256);
$checksum= "\x00\x00";
$code = "\x00";
$identifier = chr(rand(0,255)) . chr(rand(0,255));
$msg = "!\"#$%&'()*+,-./1234567";
$package = $type.$code.$checksum.$identifier.$seqNumber.$msg;
$checksum = icmpChecksum($package);
$package = $type.$code.$checksum.$identifier.$seqNumber.$msg;
/* socket connect */
if(@socket_connect($socket, $target, null)){
for($i = 0; $i < $count; $i++){
list($start_usec, $start_sec) = explode(" ", microtime());
$start_time = ((float) $start_usec + (float) $start_sec);
$startTime = microtime(true);
socket_send($socket, $package, strLen($package), 0);
while ($startTime + $timeout*1000 > microtime(true)){
if(socket_read($socket, 255) !== false) {
list($end_usec, $end_sec) = explode(" ", microtime());
$end_time = ((float) $end_usec + (float) $end_sec);
$total_time = $end_time - $start_time;
echo "round trip time (".$i."): ". $total_time
."\n";
return $total_time;
break;
}else{
return "null";
echo "Timed out (".$i."), Got no echo reply\n";
break;
}
}
usleep($interval*1000);
}
socket_close($socket);
}
}
function icmpChecksum($data){
if (strlen($data)%2) $data .= "\x00";
$bit = unpack('n*', $data);
$sum = array_sum($bit);
while ($sum >> 16)
$sum = ($sum >> 16) + ($sum & 0xffff);
return pack('n*', ~$sum);
}
?>
----
Server IP: 72.52.91.14
Probable Submitter: 164.215.32.116
----
Manual Page -- http://php.net/manual/en/function.socket-create.php
Edit -- https://master.php.net/note/edit/120174
Del: integrated -- https://master.php.net/note/delete/120174/integrated
Del: useless -- https://master.php.net/note/delete/120174/useless
Del: bad code -- https://master.php.net/note/delete/120174/bad+code
Del: spam -- https://master.php.net/note/delete/120174/spam
Del: non-english -- https://master.php.net/note/delete/120174/non-english
Del: in docs -- https://master.php.net/note/delete/120174/in+docs
Del: other reasons-- https://master.php.net/note/delete/120174
Reject -- https://master.php.net/note/reject/120174
Search -- https://master.php.net/manage/user-notes.php