fonction php pour capter l'ip [src]

WRInaute passionné
bon

dans la suite de ma release, j'ai optimisé mon traceur d'ip

Code:
####################################################################
function get_ip(){
# get_ip by roger girardin
################################################################
# if the environnement var HTTP_X_FORWARDED_FOR or HTTP_VIA 
# then the client ip is HTTP_X_FORWARDED_FOR
#
#	proxy
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) || isset($_SERVER['HTTP_VIA']))
	{
	$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} 
# if HTTP_CLIENT_IP is set then the client ip is HTTP_CLIENT_IP
	elseif(isset($_SERVER['HTTP_CLIENT_IP']))
		{
		$ip = $_SERVER['HTTP_CLIENT_IP'];
		}
		# else the client ip is REMOTE_ADDR
	elseif(isset($_SERVER['REMOTE_ADDR']))
		{
		$ip = $_SERVER['REMOTE_ADDR'];
		}
	else
		{
		$ip = "0.0.0.0";	# hidden
		}
$ip_num = 0;
#
if($array_ip = explode(".",$ip))
	{
	$count = count($array_ip);
	#
	for($i = 0; $i < $count; $i++)
		{
		settype($array_ip[$i],"integer");
		$exp = $count - $i -1;
		#
		$ip_num += $array_ip[$i]*pow(256,$exp);
		}
	}
return $ip_num;
}
 
WRInaute accro
et si $_SERVER['HTTP_VIA'] est défini et pas $_SERVER['HTTP_X_FORWARDED_FOR'], ça va renvoyer une belle erreur.
Sinon, pour que le client reçoive le résultat de sa requête, il faut bien qu'il y ait une ip de définie, elle ne peut être hidden. Au pire, ça sera de l'ip spoofing.
 
WRInaute passionné
lol

c'est vrai que ma condition est glauque, une variable ne va pas sans l'autre, $ip sera toujours renseignée par l'adresse qui m'interesse le plus

dans l'autre version je loggai toutes les adresses, mais effectivement la je paux enlever le deuxième paramètre de ma condition

pour le hidden :

il y a des systemes de proxy qui renvoient unknow comme adresse ip, c'est pire que du spoof

rog
 
WRInaute passionné
release

j'ai modifié ma strategie

comme je prends la langue par le navigateur, je n'ai pas besoin de matcher l'expression decimale de l'ip avec une table de correspondance

et vu d'un aspect sécuritaire, il est plus judicieux de logger toutes les adresses renvoyées par le client

la nouvelle fonction renvoie un tableau qui contient toutes les ip loggables

j'ai ajouté une fonction pour verifier si une chaine est bien une adresse ip (V4)

Code:
####################################################################
# changing the function to log every ip related var
####################################################################
function get_ip(){
#
$varname = array(0=>"HTTP_VIA","HTTP_X_FORWARDED_FOR","HTTP_CLIENT_IP","REMOTE_ADDR");
$ip = array();
#
for($i = 0; $i < count($varname); $i++)
	{
	if(isset($_SERVER["$varname[$i]"]))
		{
		if(verif_ip($_SERVER["$varname[$i]"]))
			{
			$ip[$i] = $_SERVER["$varname[$i]"];
			}
			else
				{
				$ip[$i] = htmlentities($_SERVER["$varname[$i]"]);
				}
		}
		else
			{
			$ip[$i] = NULL;
			}
	}
#
return $ip;
}
####################################################################
# checking valid ip
####################################################################
function verif_ip($ip){
#
$ip = trim($ip);
#
if($explode = explode(".",$ip))
	{
	$count = count($explode);
	#
	if($count == 4)
		{
		for($i = 0; $i < count($explode); $i++)
			{
			if($explode[$i] < 0 || $explode[$i] > 255)
				{
				return false;
				}
			}
		}
		else
			{
			return false;
			}
	}
	else
		{
		return false;
		}
return true;
}
####################################################################

j'ai l'impression que ça n'interesse personne
:D

rog
 
WRInaute accro
>> j'ai l'impression que ça n'interesse personne

en meme temps, on est pas dans un forum de depots de scripts de programmation, mais dans un forum dédié au referencement :) et avec tous les outils de stats qui existent déjà en plus ... ;)
 
WRInaute passionné
c'est sur kiwi mais les scripts existants ne me conviennent pas

thierry

$ip est un array qui contient toutes les variables $_SERVER pour les index :

HTTP_VIA
HTTP_X_FORWARDED_FOR
HTTP_CLIENT_IP
REMOTE_ADDR

rog
 
WRInaute passionné
bah non

mon acienne detection capturait

HTTP_X_FORWARDED_FOR
HTTP_CLIENT_IP
REMOTE_ADDR

et je retrouvais des logs comme ça

224.11.42, 200.228.66.234
201.29.192.51, unknown
10.0.0.162, 10.129.50.82
10.0.0.162, 202.38.62.226
10.15.36.3, 10.15.30.248
201.4.69.134, 165.228.128.11, unknown

y en avait même qui avait les trois variables renseignées, maintenant je log systematiquement les quatres, quelles soient vides ou non

rog
 
Discussions similaires
Haut