Tutorial PHP: Get real IP

Postat de Bogdan pe September 04, 2008
Categorie: IT

În construirea unui site la un moment dat, probabil, este nevoie de aflarea IP-ului vizitatorului. Scopurile sunt destule, cel mai întâlnit (de exemplu pentru bloggeri) ar fi banarea comentatorilor nedoriţi. Alt exemplu ar fi ascunderea unor pagini (de exemplu cele de administrare) şi afişarea lor doar pentru anumiţi useri. Şi exemplele ar putea continua…

Problema apare atunci când vizitatorul foloseşte un proxy, iar IP-ul nu este cel al userului, ci cel al proxy-ului. Am găsit un mic cod care face exact lucrul ăsta, găseşte IP-ul din spatele proxy-ului. Încă nu l-am încercat pe proxy-uri anonime (unde prea ai ce face, n-o să afli IP-ul original), dar pentru cât m-am jucat eu cu el s-a comportat bine.

function ip_first($ips) {
if (($pos = strpos($ips, ‘,’)) != false) {
return substr($ips, 0, $pos);
} else {
return $ips;
}
}

function ip_valid($ips) {
if (isset($ips)) {
$ip = ip_first($ips);
$ipnum = ip2long($ip);
if ($ipnum !== -1 && $ipnum !== false && (long2ip($ipnum) === $ip)) { // PHP 4 and PHP 5
if (($ipnum < 167772160 || $ipnum > 184549375) && // Not in 10.0.0.0/8
($ipnum < -1408237568 || $ipnum > -1407188993) && // Not in 172.16.0.0/12
($ipnum < -1062731776 || $ipnum > -1062666241)) // Not in 192.168.0.0/16
return true;
}
}
return false;
}

function get_real_ip() {
$check = array(‘HTTP_X_FORWARDED_FOR’, ‘HTTP_X_FORWARDED’,
‘HTTP_FORWARDED_FOR’, ‘HTTP_FORWARDED’,
‘HTTP_VIA’, ‘HTTP_X_COMING_FROM’, ‘HTTP_COMING_FROM’
);

foreach ($check as $c) {
if (ip_valid(&$_SERVER[$c])) {
return ip_first($_SERVER[$c]);
}
}

return $_SERVER['REMOTE_ADDR'];
}

de aici.

Post-uri asemănătoare

Tags: , , ,

1 Comentariu to Tutorial PHP: Get real IP

alex80 a scris pe 4 September 2008:

Interesant si folositor. Mersi!

Comentează

WP_Big_City

Do NOT fill this !