Handle IPv4-mapped IPv6 addresses
This commit is contained in:
parent
e789890950
commit
fa704bcdec
1 changed files with 25 additions and 11 deletions
30
echoip.php
30
echoip.php
|
|
@ -1,20 +1,34 @@
|
||||||
<?php
|
<?php
|
||||||
|
function unmask_ipv4($addr) {
|
||||||
|
$prefix = '00000000000000000000ffff';
|
||||||
|
$prefix_bin = hex2bin($prefix);
|
||||||
|
if (($addr_bin = inet_pton($addr)) === FALSE)
|
||||||
|
return false;
|
||||||
|
if (substr($addr_bin, 0, strlen($prefix_bin)) == $prefix_bin)
|
||||||
|
$addr_bin = substr($addr_bin, strlen($prefix_bin));
|
||||||
|
return inet_ntop($addr_bin);
|
||||||
|
}
|
||||||
|
|
||||||
ini_set('default_charset', 'iso-8859-1');
|
ini_set('default_charset', 'iso-8859-1');
|
||||||
header('Content-Type: text/plain');
|
header('Content-Type: text/plain');
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
if ($ip = unmask_ipv4($_SERVER['REMOTE_ADDR'])) {
|
||||||
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
|
||||||
$cmd = isset($_GET['cmd']) ? $_GET['cmd'] : '';
|
$cmd = isset($_GET['cmd']) ? $_GET['cmd'] : '';
|
||||||
if ($cmd === 'long') {
|
switch ($cmd) {
|
||||||
|
case 'long':
|
||||||
|
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4))
|
||||||
printf('%u', ip2long($ip));
|
printf('%u', ip2long($ip));
|
||||||
}
|
else
|
||||||
elseif ($cmd === 'hostname') {
|
echo $ip;
|
||||||
|
break;
|
||||||
|
case 'host':
|
||||||
|
case 'hostname':
|
||||||
echo gethostbyaddr($ip);
|
echo gethostbyaddr($ip);
|
||||||
}
|
break;
|
||||||
else {
|
default:
|
||||||
echo $ip;
|
echo $ip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
echo $ip;
|
echo 'Invalid IP address';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue