IP-Adresse ermitteln
Andreas-Lindig
- php
0 Thomas Luethi0 Mike
Hallo Forum,
wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?
Ich habe nur Funktionen gefunden, die die IP aufgrund einer Adresse ermitteln, aber die muß ich ja erstmal wissen.
vielen Dank und Gruß,
Andreas
Hallo,
wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?
$ip = getenv('REMOTE_ADDR');
oder
$ip = $_SERVER['REMOTE_ADDR'];
Siehe auch ein paar Threads weiter unten: [pref:t=74115&m=427195]
Gruesse,
Thomas
Hallo Thomas,
vielen Dank, hab ich mal wieder nicht aufmerksam genug mitgelesen ;)
Gruß, Andreas
Moin Andreas,
wie kann ich in PHP die IP-Adresse desjenigen ermitteln, der gerade mein Script aufruft?
Ich nutze diese Version, die IP sollte in $realip stehen:
if (isSet($_SERVER))
{
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif
(isSet($_SERVER["HTTP_CLIENT_IP"]))
{
$realip = $_SERVER["HTTP_CLIENT_IP"];
}
else
{
$realip = $_SERVER["REMOTE_ADDR"];
}
}
else
{
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) )
{
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
}
elseif
( getenv( 'HTTP_CLIENT_IP' ) )
{
$realip = getenv( 'HTTP_CLIENT_IP' );
}
else
{
$realip = getenv( 'REMOTE_ADDR' );
}
}
Grüße
Mike
Hallo Mike,
also bei mir funktioniert es mit einem einfachen '$_SERVER["REMOTE_ADDR"]'. Hat es einen bestimmten Grund, daß Du so viel abfragst?
Gruß, Andreas
hi,
also bei mir funktioniert es mit einem einfachen '$_SERVER["REMOTE_ADDR"]'. Hat es einen bestimmten Grund, daß Du so viel abfragst?
es "funktioniert" bei dir in dem sinne, dass du eine IP-adresse angezeigt bekommst.
ob diese aber auch wirklich die IP des client-rechners ist, kannst du nicht sagen.
wenn z.b. ein proxy dazwischen hängt, bekommst du vielleicht die IP des proxies stattdessen.
oder aber der proxy ist sehr freundlich eingestellt, dann bekommst du neben der IP des proxies als REMOTE_ADDR auch noch die eigentliche client-IP unter der kennung HTTP_X_FORWARDED_FOR oder HTTP_CLIENT_IP mitgeteilt.
diese information kann der proxy in zusätzlichen HTTP-headern mitliefern, muss er aber nicht.
der rest aus mikes script dient dann nochmal extra zur unterscheidung, ob der wert jetzt aus dem superglobalen array $_SERVER geholt werden soll, oder per funktion getenv().
dies dient dazu, unterschiedliche PHP-versionen zu berücksichtigen - wenn du also weisst, dass du nur für (eine) aktuelle PHP-version(en) programmierst, kannst du dir diese abfrage sparen, und nur den zugriff üer $_SERVER verwenden.
gruss,
wahsaga
Hallo wahsaga,
vielen Dank für die Ausführungen. Also ich benutze, in diesem Falle die IP, um Mehrfachabsendungen eines Formulars innerhalb kurzer Zeit zu verhindern. Ich speichere also die IP und den dazugehörigen Timestamp. Wenn mir jetzt, trotz Script von Mike, der Proxy nur seine IP übermittelt, kann es doch _theoretisch_ so sein, daß zwei verschiedene Clients über den selben Proxy kurz nacheinander kommen und der zweite dann gesperrt wird oder?
Ich wollte das nicht mit einer Session machen, weil die Nummer ja genauso bzw. leichter manipulierbar ist von einem, der wirklich übles im Sinn hat.
Gruß, Andreas
hi,
Wenn mir jetzt, trotz Script von Mike, der Proxy nur seine IP übermittelt, kann es doch _theoretisch_ so sein, daß zwei verschiedene Clients über den selben Proxy kurz nacheinander kommen und der zweite dann gesperrt wird oder?
ja, durchaus.
du musst also abschätzen, wie hoch dieses "risiko" sein dürfte, und ob du mit ein paar dadurch verärgerten besuchern leben kannst.
dabei solltest du beachten, dass z.b. nicht nur vom arbeitsplatz aus surfende leute oftmals hinter einem proxy sitzen, sondern auch manche ISP bei dial-up-verbindungen zwangsproxies einsetzen, über die die requests dann laufen ...
Ich wollte das nicht mit einer Session machen, weil die Nummer ja genauso bzw. leichter manipulierbar ist von einem, der wirklich übles im Sinn hat.
na ja, wenn dich jemand wirklich ärgern will, ist die IP-sperre eigentlich auch eher witzlos.
trenne ich meine verbindung, und wähle mich anschliessend neu ein, gibt mir mein provider mit allergrösster wahrscheinlichkeit eine anders lautende IP aus seinem fundus an dynamischen IPs.
und selbst wenn nicht, dann suche ich mir irgendein scriptkiddie-tool, welches das fälschen der IP-adresse ermöglicht (sog. "IP-spoofing IIRC). dann kommen die antworten deines servers zwar nicht mehr bei mir an, aber so what? mir ging's ja nur um den POST-request zum erstellen eines neuen eintrages ...
gruss,
wahsaga
na ja, wenn dich jemand wirklich ärgern will, ist die IP-sperre eigentlich auch eher witzlos.
trenne ich meine verbindung, und wähle mich anschliessend neu ein, gibt mir mein provider mit allergrösster wahrscheinlichkeit eine anders lautende IP aus seinem fundus an dynamischen IPs.
das ist mir schon bekannt, aber es geht ja auch nur um eine Zeitsperre - in meinem Beispiel 3 Minuten, dann kann auch die gleiche IP wieder posten. Nur daß einer nicht einfach immer wieder daraufklickt. Ich gehe davon aus, daß keiner Lust hat für jedes Posting sich neu einzuwählen. Dann kann er auch 3 Minuten warten, zumal die Neueinwahl immer extra kostet - bei einem by-call-Anbieter jedenfalls.
und selbst wenn nicht, dann suche ich mir irgendein scriptkiddie-tool, welches das fälschen der IP-adresse ermöglicht (sog. "IP-spoofing IIRC).
Hast Du einen anderen Vorschlag?
Gruß, Andreas