<?php
|
|
|
|
function get_substring($string, $start, $end){
|
|
$string = ' ' . $string;
|
|
$ini = strpos($string, $start);
|
|
if ($ini == 0) return '';
|
|
$ini += strlen($start);
|
|
$len = strpos($string, $end, $ini) - $ini;
|
|
return substr($string, $ini, $len);
|
|
}
|
|
|
|
function ip2geo ($host) {
|
|
@$data = file_get_contents('http://ipinfo.io/'.$host);
|
|
if ($data) {
|
|
$data = json_decode($data);
|
|
return $data->loc;
|
|
} else {
|
|
return "";
|
|
|
|
}
|
|
}
|
|
|
|
function get_client_ip() {
|
|
$ipaddress = '';
|
|
if (getenv('HTTP_CLIENT_IP'))
|
|
$ipaddress = getenv('HTTP_CLIENT_IP');
|
|
else if(getenv('HTTP_X_FORWARDED_FOR'))
|
|
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
|
|
else if(getenv('HTTP_X_FORWARDED'))
|
|
$ipaddress = getenv('HTTP_X_FORWARDED');
|
|
else if(getenv('HTTP_FORWARDED_FOR'))
|
|
$ipaddress = getenv('HTTP_FORWARDED_FOR');
|
|
else if(getenv('HTTP_FORWARDED'))
|
|
$ipaddress = getenv('HTTP_FORWARDED');
|
|
else if(getenv('REMOTE_ADDR'))
|
|
$ipaddress = getenv('REMOTE_ADDR');
|
|
else
|
|
$ipaddress = 'UNKNOWN';
|
|
return $ipaddress;
|
|
|
|
}
|
|
|
|
$data = array("points" => array());
|
|
$traceroute = "";
|
|
|
|
function traceroute() {
|
|
global $data, $traceroute;
|
|
$traceroute = shell_exec("traceroute google.com");
|
|
//$traceroute = shell_exec("traceroute " . get_client_ip());
|
|
|
|
$first = true;
|
|
foreach(preg_split("/((\r?\n)|(\r\n?))/", $traceroute) as $line){
|
|
if ($first) {
|
|
$first = false;
|
|
continue;
|
|
}
|
|
$ipgeo = explode(",", ip2geo(get_substring($line, "(", ")")));
|
|
|
|
$coordinates = array('x' => $ipgeo[0], 'y' => $ipgeo[1]);
|
|
|
|
array_push($data['points'], $coordinates);
|
|
}
|
|
}
|
|
|
|
function raw_output() {
|
|
global $traceroute;
|
|
echo json_encode(str_replace("\n", "<br>", $traceroute));
|
|
}
|
|
|
|
function json_output() {
|
|
global $data;
|
|
echo json_encode($data);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
?>
|