IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] IP réelle du visiteur


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Cookies] IP réelle du visiteur
    Bonjour,

    Pour un module de statistiques j'ai besoin de detecter le plus précisement possible (je sais que je ne pourrais pas en detecter un bon nombre) les IP des visiteurs. Ceci sert donc essentiellement aux utilisateurs derrière des proxy.

    Dans la mesure ou ceci me semble assez compliqué à tester, je me tourne plutot vers une classe opensource.

    Or j'ai regardé les fonctions de Openads qui permettent de faire ceci mais au vus du code je pense que sa a été codé à l'araché et du coup je ne suis pas certain que sa fonctionne correctement !

    Est ce que quelqu'un a un bout de code, une classe ou une page qui peux faire ceci et surtout est ce qu'il peux atester que ce code fonctionne ?

    Si sa peux servir, voici le code de Openads. A savoir que le code est etrange au niveau des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Get last item from list
    $IP = explode (',', $IP);
    Puisque $IP ne contien a mon avis qu'une seule valeur.

    De plus il est etrange que la fonction phpAds_reverseLookup(); ne soit pas appelée avant la fonction phpAds_proxyLookup();

    Je suis egalement etonné par la suite des tests sur les éléments de la variable serveur qui peuvent potentiellement contenir une IP dans la mesure ou sa semble dépendre du type de proxi et qu'aucun test n'est effectué pour detecter le type de proxy ici !



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    // Check for proxyserver
    phpAds_proxyLookup();
     
    // Reverse lookup
    phpAds_reverseLookup();
     
    /*********************************************************/
    /* Do the proxy lookup                                   */
    /*********************************************************/
     
    function phpAds_proxyLookup()
    {
    	global $phpAds_config;
     
    	if (!$phpAds_config['proxy_lookup'])
    		return;
     
    	$proxy = false;
    	if (isset ($_SERVER['HTTP_VIA']) && $_SERVER['HTTP_VIA'] != '') $proxy = true;
     
    	if (isset ($_SERVER['REMOTE_HOST']))
    	{
    		if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'proxy')))	$proxy = true;
    		if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'cache')))	$proxy = true;
    		if (is_int (strpos ($_SERVER['REMOTE_HOST'], 'inktomi')))	$proxy = true;
    	}
     
    	if ($proxy)
    	{
    		$IP = '';
     
    		// Overwrite host address if a suitable header is found
    		if (isset($_SERVER['HTTP_FORWARDED']) && 		$_SERVER['HTTP_FORWARDED'] != '') 		 $IP = $_SERVER['HTTP_FORWARDED'];
    		if (isset($_SERVER['HTTP_FORWARDED_FOR']) &&	$_SERVER['HTTP_FORWARDED_FOR'] != '') 	 $IP = $_SERVER['HTTP_FORWARDED_FOR'];
    		if (isset($_SERVER['HTTP_X_FORWARDED']) &&		$_SERVER['HTTP_X_FORWARDED'] != '') 	 $IP = $_SERVER['HTTP_X_FORWARDED'];
    		if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&	$_SERVER['HTTP_X_FORWARDED_FOR'] != '') $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
    		if (isset($_SERVER['HTTP_CLIENT_IP']) &&		$_SERVER['HTTP_CLIENT_IP'] != '') 		 $IP = $_SERVER['HTTP_CLIENT_IP'];
     
    		// Get last item from list
    		$IP = explode (',', $IP);
    		$IP = trim($IP[count($IP) - 1]);
     
    		if ($IP && $IP != 'unknown' && !phpAds_PrivateSubnet($IP))
    		{
    			$_SERVER['REMOTE_ADDR'] = $IP;
    			$_SERVER['REMOTE_HOST'] = '';
    		}
    	}
    }
     
     
     
    /*********************************************************/
    /* Do the reverse lookup                                 */
    /*********************************************************/
     
    function phpAds_reverseLookup()
    {
    	global $phpAds_config;
     
    	if (!isset($_SERVER['REMOTE_HOST']) || $_SERVER['REMOTE_HOST'] == '')
    	{
    		if ($phpAds_config['reverse_lookup'])
    			$_SERVER['REMOTE_HOST'] = @gethostbyaddr ($_SERVER['REMOTE_ADDR']);
    		else
    			$_SERVER['REMOTE_HOST'] = $_SERVER['REMOTE_ADDR'];
    	}
    }
     
     
     
    /*********************************************************/
    /* Match an IP address against a subnet                  */
    /*********************************************************/
     
    function phpAds_matchSubnet($ip, $net, $mask)
    {
    	if (!is_integer($ip)) $ip = ip2long($ip);
    	$net = ip2long($net);
     
    	if (!$ip || !$net)
    		return false;
     
    	if (is_integer($mask))
    	{
    		// Netmask notation x.x.x.x/y used
     
    		if ($mask > 32 || $mask <= 0)
    			return false;
    		elseif ($mask == 32)
    			$mask = ~0;
    		else
    			$mask = ~((1 << (32 - $mask)) - 1);
    	}
    	elseif (!($mask = ip2long($mask)))
    		return false;
     
    	return ($ip & $mask) == ($net & $mask) ? true : false;
    }
     
     
     
    /*********************************************************/
    /* Check if an IP address is not publicly routable       */
    /*********************************************************/
     
    function phpAds_PrivateSubnet($ip)
    {
    	$ip = ip2long($ip);
     
    	if (!$ip) return false;
     
    	return (phpAds_matchSubnet($ip, '10.0.0.0', 8) || 
    		phpAds_matchSubnet($ip, '172.16.0.0', 12) ||
    		phpAds_matchSubnet($ip, '192.168.0.0', 16) ||
    		phpAds_matchSubnet($ip, '127.0.0.0', 24)
    		);
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    Les adresses IP ne sont pas un bon moyen pour permettre une authentification (ou un enregistrement), facilement usurpable, dynamique...

    Une personnes qui veut nuire à ton système y arrivera.

    Pour ce qui est du script, il est assez simpliste, il contrôle juste si dans le nom d'hôte figure PROXY CACHE ou INKTOMI et si les le serveurs reçois des HTTP_VIA.

    Si tu veux faire des teste le niveau d'anonymat d'un proxy:
    http://www.ipmaster.org/proxyjudge.html

    tu trouvera peut être ton bonheur en téléchargement le code source du système de teste d'anonymat d'un proxy

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui je sais que ce n'est pas une bonne solution mais dans le cas present c'est la seule solution. Pour faire des stats sur les utilisateurs, on a soit l'ip soit les cookies. Et vu le nombre de personnes qui les désactivent....

    Le lien donné donne un script PHP de 3 lignes qui affiche les variables $_SERVER !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 297
    Points : 303
    Points
    303
    Par défaut
    excuse moi, c'est du Perl.

    Si tu veux contrôler, ça doit être possible alors avec un système de blacklist, qui doit être mise à jours (pour être pleinement efficace).
    Tu télécharges une liste de proxy que tu bloques ou filtre les personnes qui utilisent les adresses IP blacklister

    http://www.proxy4free.com/page1.html
    http://www.publicproxyservers.com/page1.html
    ...

    Personnellement, je ne pense pas qu'en PHP se soit tellement réalisable, tout simplement parce qu'une analyse (comparaison) de plusieurs centaines de millier d'adresse pour chaque visiteurs, ça risque d'être lourd et lent.

    Je te conseil un IPTABLES qui bloquera tout simple.
    un exemple: http://www.trustonme.net/didactels/228.html

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok merci.

    Mais en fait je ne veux bloquer personne, je veux detecter le maximum d'IP. Donc assayer de detecter les IP des utilisateurs derriere les proxy quand ceci est possible.

    Je ne veux rien faire de plus.

    Mon probleme est surtout pour coder la fonction qui fait ceci en fonction de tests à effectuer pour voir si un proxy est présent et le cas échéant pour recuperer la bonne ip dans les variables serveurs.

Discussions similaires

  1. Connaître l'ip réelle du visiteur
    Par jolatouf dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 19/04/2024, 09h32
  2. [Cookies] Afficher Bonjour "prenom du visiteur"
    Par jaupart dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2007, 16h00
  3. IP réelle du visiteur
    Par afrodje dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2007, 13h52
  4. [Cookies] détection de la langue du visiteur + cookie
    Par RobinNono dans le forum Langage
    Réponses: 9
    Dernier message: 25/08/2006, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo