rendered paste body#!/usr/bin/env php<?$pingTarget = "google.com";$pingCount = 4;$output = shell_exec("ping -c".escapeshellarg((int)$pingCount)." ".escapeshellarg($pingTarget));if(empty($output)) { echo "err: most likely invalid / unreachable domain"; exit(1);}//grab each ping line$pingLineRegex = "/([0-9]+) bytes from ([^\s]+)(?: \((.+)\))?: icmp_seq=([0-9]+) ttl=([0-9]+) time=([0-9\.]+) ms/";//grab aggregated results @ btm$pingResultRegex = $re = "/--- (.+) ping statistics ---\\n([0-9]+) packets transmitted, ([0-9]+)(?: packets)? received, ([0-9\\.]+)% packet loss(?:, time ([0-9]+)ms)?\\n(?:round\\-trip|rtt)? min\\/avg\\/max\\/(?:stddev|mdev)? = ([0-9\\.]+)\\/([0-9\\.]+)\\/([0-9\\.]+)\\/([0-9\\.]+) ms/";preg_match_all($pingLineRegex, $output, $pingLineMatches);$pings = array();//array[0] contains each matched line entirely//use this to grab the count$pingCount = count($pingLineMatches[0]);for($i=0;$i<$pingCount;$i++) { $pings[] = array( "bytes" => $pingLineMatches[1][$i], "host" => $pingLineMatches[2][$i], "ip" => $pingLineMatches[3][$i] ?: $pingLineMatches[2][$i], "icmp_req" => $pingLineMatches[4][$i], "ttl" => $pingLineMatches[5][$i], "time" => $pingLineMatches[6][$i], );}preg_match_all($pingResultRegex, $output, $pingResultMatches);$pingStatistics = array( "host" => $pingResultMatches[1], "tx" => $pingResultMatches[2], "rx" => $pingResultMatches[3], "loss" => $pingResultMatches[4], "time" => empty($pingResultMatches[5][0]) ? array(0) : $pingResultMatches[5], "min" => $pingResultMatches[6], "avg" => $pingResultMatches[7], "max" => $pingResultMatches[8], "mdev" => $pingResultMatches[9]);var_dump($pings);var_dump($pingStatistics);?>