note 120174 added to function.socket-create

From: 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

« previous php.notes (#207116) next »