2010-08-10 4 views
4

J'ai essayé d'obtenir l'adresse IP du client naviguant sur le site en utilisant $_SERVER['REMOTE_ADDR'], mais je ne reçois pas l'adresse IP exacte du client s'il vous plaît aidez-moi ... MerciComment faire pour obtenir l'adresse IP du client

+2

En fait, c'est la façon de le faire. Que voulez-vous dire par "pas l'adresse IP exacte"? – JochenJung

+0

Qu'est-ce que vous obtenez de REMOTE_ADDR? – fabrik

+3

Je soupçonne que vous recevez l'adresse IP externe du routeur - pas l'adresse IP interne que vous attendez de la machine qui consulte le site – Alex

Répondre

5
$_SERVER['REMOTE_ADDR'] 

est le meilleur que vous obtiendrez vraiment.

Il y a plusieurs autres têtes qui peuvent être envoyés par le client (HTTP_FORWARDED_FOR et al.) - voir this question pour un aperçu complet - mais ceux-ci peuvent être librement manipulés par le client et sont pas à Lodgis .

+0

merci pour l'aide .. – user389055

1

L'adresse IP que le serveur voit est l'adresse IP publique du client. S'ils sont derrière un routeur NAT, ils auront une adresse différente dans leur réseau.

Si vous exécutez ipconfig (Windows) ou ifconfig (systèmes Unix-y) sur l'ordinateur client, vous obtiendrez leur adresse IP locale. Si c'est dans les gammes 192.168.x.x ou 10.x.x.x, ils sont derrière un routeur NAT et Internet les verra venir d'une adresse différente.

+0

merci pour l'aide .. – user389055

1

Si l'utilisateur est derrière un proxy, vous obtiendrez l'adresse IP du proxy. L'IP de l'utilisateur serait alors l'un d'entre eux (vous aurez besoin de vérifier les deux): $ _SERVER [ « HTTP_CLIENT_IP »] $ _SERVER [ « HTTP_X_FORWARDED_FOR »]

Si l'un d'eux est défini, l'utilisateur est derrière un proxy (à moins qu'il ne simule ces en-têtes) et vous devriez les utiliser comme IP source. Sinon, utilisez $ _SERVER ['REMOTE_ADDR'].

+0

merci pour l'aide .. – user389055

3

// Obtenez le client réel IP

function getIP() { 
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) { 
     $ip = getenv("HTTP_CLIENT_IP"); 
    } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) { 
     $ip = getenv("HTTP_X_FORWARDED_FOR"); 
    } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) { 
     $ip = getenv("REMOTE_ADDR"); 
    } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) { 
     $ip = $_SERVER['REMOTE_ADDR']; 
    } else { 
     $ip = "unknown"; 
    } 
    return($ip); 
} 
Questions connexes