You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

78 lines
1.6 KiB

<?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 " . 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($traceroute);
}
function json_output() {
global $data;
echo json_encode($data);
}
?>