2013-02-25 3 views
-1

Je suis en train de construire une base de données avec des enregistrements de visiteurs uniques à une page particulière sur mon site en obtenant leur adresse IP.aller chercher adresse IP unique d'ordinateurs sur un réseau Internet en php

Le code ci-dessous va chercher l'IP du visiteur:

$getip = $_SERVER['REMOTE_ADDR']; 
echo "<b>IP Address: $getip</b>"; 

Mais je me rends compte que ce qui est très peu fiable et inexact si différents utilisateurs d'Internet sont sur un réseau Internet spécifique et ils partagent tous la même adresse IP en utilisant différents ordinateurs (Comme un cybercafé public ou voir l'exemple ci-dessous).

Exemple:

XYZ Ltd utilise une connexion Internet spécifique, si tous les employés de XYZ Ltd sont connectés à Internet via la connexion Internet et société de l'adresse IP de XYZ Ltd est 69.18.107.24. Si certains des employés de XYZ visitent ma page, le code ci-dessus ne me donnerait pas l'adresse IP unique de l'ordinateur de l'utilisateur, mais je continuerai à obtenir l'adresse IP de l'entreprise (69.18.107.24) qui est inexacte et trompeuse le voir comme le même visiteur alors qu'il y a différents visiteurs utilisant la connexion internet IP.

Comment puis-je récupérer une adresse IP utilisateur unique basée sur l'ordinateur de l'utilisateur, qu'elle partage la même connexion Internet ou non?

Je ne veux pas utiliser les cookies PHP parce que certains navigateurs ne le supportent pas alors que certains utilisateurs le désactivent ou le désactivent.

Serait très reconnaissant d'obtenir de l'aide avec cela ... Merci!

+0

La plupart des ordinateurs situés derrière des adresses publiques partagées auront des adresses privées. Voulez-vous vraiment ceux-ci? –

+1

ouais je ne vous dérange pas ceux? ... apprécierait l'aide .. Merci! – Sms

+1

Même si vous le pouvez (et vous ne pouvez pas, voir la réponse de deceze), une adresse privée comme '192.168.0.1' peut être partagée par 100.000.000 ordinateurs. C'est plusieurs ordres de grandeur moins précis que '69.18.107.24'. –

Répondre

1

Il n'est pas possible d'obtenir les adresses IP locales des ordinateurs derrière une connexion partagée. Même si vous pouviez les obtenir, ils ne seraient pas uniques, car ils sont réutilisés - c'est tout le point de NAT. Vous auriez beaucoup de gens utilisant 192.168.1.1 ou des adresses similaires.

Si vous souhaitez différencier plusieurs machines partageant la même adresse IP, vous pouvez ajouter un autre facteur, tel que le user agent string qui a tendance à différer.

Par exemple:

<?php 
md5(
    $_SERVER['REMOTE_ADDR'] . 
    $_SERVER['HTTP_USER_AGENT'] 
); 
// 80b567b7c7ccfbda75a9712f16ca4429 

vous donnerait un hachage qui ne serait identique si deux utilisateurs partagent la même adresse IP et ont la même version du navigateur et système d'exploitation.

Visitez le Panopticlick pour en savoir plus sur les "empreintes digitales du navigateur". Étonnamment, les navigateurs sont presque uniques dans la combinaison de leur configuration. Si vous introduisez l'analyse côté client avec Javascript, où vous pouvez accéder à la résolution d'affichage, aux versions de plugin installées et à d'autres détails, vous pouvez facilement différencier les utilisateurs ayant une adresse IP partagée.

+0

Cool idée ... Travailler sur cela et l'améliorer davantage en obtenant plus d'informations sur le navigateur pour le rendre plus fiable. Merci! – Sms

+0

Ou utilisez simplement un logiciel d'analyse Web existant tel que [Piwik] (http://piwik.org/). – pixelistik

+0

Notez bien que dans un contexte d'entreprise, où les proxies sont communs, il est également courant que chaque poste de travail soit un clone, ce qui rend souvent les agents utilisateurs identiques. – deceze

3

Vous ne pouvez pas. Les adresses IP sont un mécanisme de distribution de paquets de données. Rien ne garantit qu'une adresse IP dans un réseau spécifique est unique à une machine spécifique, il n'y a tout simplement pas de telle corrélation. La machine a une adresse unique à l'intérieur de son réseau, mais cette adresse n'est peut-être pas unique au monde (et vous ne pouvez pas obtenir cette adresse IP de toute façon). L'adresse IP publique du proxy partagé est unique sur l'internet public, mais rien ne dicte qu'elle doit correspondre à une machine physique.

IPs! = Machines, vivez avec.

-1

Voici la réponse à votre question:

<?php 

echo "IP address".$_SERVER["REMOTE_ADDR"] 

echo "LAN Address".$_SERVER["HTTP_X_FORWARDED_FOR"] 
?> 

Ce n'est pas un moyen sûr d'obtenir un visiteur unique. L'adresse LAN peut être usurpée facilement. De nombreuses entreprises utilisent également un serveur DHCP qui délivre de nouvelles adresses IP LAN tous les jours. Les cookies seraient le "seul" véritable moyen de vérification.

+0

Un routeur n'est pas identique à un proxy. Les LAN sont normalement derrière les routeurs et ils ne divulguent jamais les adresses privées. (L'abaisseur aurait dû prendre soin de l'expliquer.) –

+0

Merci pour l'aide. Comme vous l'avez dit, cela peut être usurpé facilement et aussi les cookies php auraient été la meilleure option, mais certains navigateurs ne le supportent pas alors que certains utilisateurs pourraient simplement désactiver ou modifier leur réglage par rapport aux cookies ou quelque chose comme ça. info du visiteur ... – Sms

Questions connexes