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
|
||||
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');
|
||||
header('Content-Type: text/plain');
|
||||
$ip = $_SERVER['REMOTE_ADDR'];
|
||||
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
|
||||
if ($ip = unmask_ipv4($_SERVER['REMOTE_ADDR'])) {
|
||||
$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));
|
||||
}
|
||||
elseif ($cmd === 'hostname') {
|
||||
else
|
||||
echo $ip;
|
||||
break;
|
||||
case 'host':
|
||||
case 'hostname':
|
||||
echo gethostbyaddr($ip);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
echo $ip;
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo $ip;
|
||||
echo 'Invalid IP address';
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue