2011-01-13 3 views
2

ich die echten IP-Adresse von den Benutzern auf meiner Website gehen zu wollen, auch wenn sie eine Proxy-Webseite verwenden, wie hidemyass.comErste Benutzer echte IP-Adresse mit PHP

Dies ist der Code, den ich habe und dachten, es funktioniert aber Ich habe es getestet und es nicht

<?php 
function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 
?> 

Ich dachte, dieser Code würde funktionieren, aber Proxy noch umgehen es.

Vielen Dank im Voraus.

+5

Wenn jemand will, um ihre IP verstecken, was gibt Ihnen das Recht, es wissen zu müssen? – Skilldrick

+0

Du könntest versuchen, Proxies auf die schwarze Liste zu setzen, aber das wäre eine enorme andauernde Aufgabe ;-) – ChristopheD

+0

Du hättest wahrscheinlich eine bessere Chance, sie danach zu fragen :) – webbiedave

Antwort

19

Es gibt keine garantierte Möglichkeit, eine "echte" IP-Adresse zu erhalten, wenn der Proxy Sie nicht darüber informieren will (und jeder echte anonyme Proxy wird nicht).

6

Sie können nicht. Die Informationen, die Sie haben, stammen von apache/iis/whatever und sie wissen nur, wer mit Ihrem Server kommuniziert, der in diesem Fall der Proxy ist. Wenn der Proxy diese Informationen nicht in einer Kopfzeile mitschicken möchte, werden Sie sie nicht erhalten.

X-Forwarded-For ist das Beste, was Sie tun können, aber es ist nicht wahrscheinlich, dass ein anonymer Proxy das sendet.

0

fand ich einen ähnlichen Beitrag hier für einige weitere Header zu überprüfen, um zu sehen, ob der Benutzer Proxy verwendet, die

determine if user is using proxy

+0

Euh, das ist genau das gleiche Snippet wie in der Frage ... – ChristopheD

+0

Ist das nicht genau der gleiche Code aus dem OP? – jasonbar

+0

Ja, aber ich habe den Link von wo ich das Skript bekam .... – bharath

2

helfen könnten Sofern der Proxy-Adresse in den Header (gemeinsam die reale IP setzt - abhängig davon, warum der Proxy verwendet wird (normalerweise in irgendeiner Form von "X-something"), dann kann man nur die IP-Adresse des Proxy sehen.

5

Sie können nicht die „echte“ IP-Adresse sicher bekommen, wenn Sie irgendeine Art von Authentifizierungsprotokoll auf der Anwendungsebene implementieren, die die IP-Adresse codiert (das ist auch unterliegt spoofin).

Warum ist das?

Weil das IP-Datenpaket von jemandem "in der Mitte", der Zugriff darauf hat, beliebig umgeschrieben werden kann. Zum Beispiel, ein Proxy, Router, Gateway, usw.

Eine IP-Datenpaket dieser Struktur

| stuff | src ip | dst ip | stuff | 
| .... | 32-bits| 32 bits | stuff | 

So src ip hat - die, die gerade Bits sind, denken Sie daran - kann beliebig überschrieben werden.

http://www.faqs.org/rfcs/rfc791.html wird weitere Informationen geben.

0

Versuchen Sie dies bitte

function get_IP_address() 
{ 
    foreach (array('HTTP_CLIENT_IP', 
       'HTTP_X_FORWARDED_FOR', 
       'HTTP_X_FORWARDED', 
       'HTTP_X_CLUSTER_CLIENT_IP', 
       'HTTP_FORWARDED_FOR', 
       'HTTP_FORWARDED', 
       'REMOTE_ADDR') as $key){ 
    if (array_key_exists($key, $_SERVER) === true){ 
     foreach (explode(',', $_SERVER[$key]) as $IPaddress){ 
      $IPaddress = trim($IPaddress); // Just to be safe 

      if (filter_var($IPaddress, 
          FILTER_VALIDATE_IP, 
          FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) 
       !== false) { 

       return $IPaddress; 
      } 
     } 
    } 
} 
} 
Verwandte Themen