Projektowanie stron WWW od podszewki

Artykuły na każdy temat

[PHP] Jak odczytać adres IP odwiedzającego stronę?

Dodano 10.07.2009r. o 02:46
Adres IP gościa przechowywany jest w tablicy $_SERVER w polu o nazwie REMOTE_ADDR. Jeżeli chcemy je pozyskać to używamy poniższego kodu.
Kod:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
Możemy także spróbować odczytać czy ktoś używa proxy jednakże ta metoda daje około 10% skuteczności gdyż większość serwerów proxy dobrze maskuje IP.
Kod:
<?php
if($_SERVER['HTTP_CLIENT_IP'])
{
 $ip $_SERVER['HTTP_CLIENT_IP'];
}
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
{
 $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
 $ip $_SERVER['REMOTE_ADDR'];
}

echo $ip;
?>
Ponadto można to obudować w funkcję:
Kod:
<?php
function get_ip($ip2long true)
{
 if($_SERVER['HTTP_CLIENT_IP'])
 {
  $ip $_SERVER['HTTP_CLIENT_IP'];
 }
 else if($_SERVER['HTTP_X_FORWARDED_FOR'])
 {
  $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
 }
 else
 {
  $ip $_SERVER['REMOTE_ADDR'];
 }

 if($ip2long)
 {
  $ip ip2long($ip);
 }

 return $ip;
}
?>
Dla bardziej zawziętych można zawsze zapodać wersję obiektową:
Kod:
<?php
class engine
{
 // ciach

 public function get_ip($ip2long true)
 {
  if($_SERVER['HTTP_CLIENT_IP'])
  {
   $ip $_SERVER['HTTP_CLIENT_IP'];
  }
  else if($_SERVER['HTTP_X_FORWARDED_FOR'])
  {
   $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
  }
  else
  {
   $ip $_SERVER['REMOTE_ADDR'];
  }

  if($ip2long)
  {
   $ip ip2long($ip);
  }

  return $ip;
 }

 // ciach
}
?>
Jeżeli wykorzystujemy więcej niż jeden raz $ip, w którymś z formatów to warto trzymać te dane w polu aby nie katować CPU niepotrzebnie Smile

Dodatkowo w tablicy $_SERVER jest kilka rekordów, które mogą pomóc nam w detekcji osoby korzystającej z proxy.
Kod:
<?php
$_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_COMING_FROM'];
$_SERVER['HTTP_FORWARDED'];
$_SERVER['HTTP_FORWARDED_FOR'];
$_SERVER['HTTP_VIA'];
$_SERVER['HTTP_X_COMING_FROM'];
$_SERVER['HTTP_X_FORWARDED'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
?>

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 06.12.2017r. o 12:12
@Kris
Kod:
<?php
$allowed_ips = ['127.0.0.1']; // Albo w postaci int przy pomocy ip2long()

if(in_array($ip$allowed_ips) === true)
{
 // Dla wybrańców
}
else
{
 // Coś tutaj?
}
?>

Kris

Dodano 01.12.2017r. o 23:20
Bardzo dziękuję, ale czy jest sposób na zablokowanie wszystkich IP oprócz tych wybranych? Jeśli tak byłbym bardzo wdzięczny za ich przedstawienie.

WebMasterAdam

Dodano 18.04.2015r. o 20:36
O! Działa! Masz u mnie plusa jak stąd do Wietnamu i spowrotem na piechotę !!

WebMasterAdam

Dodano 18.04.2015r. o 20:30
Teraz będę wiedział, kto na stronie robi "zalewajkę". A jak coś zmaluje, to jest już go jak złapać Very Happy

Karlosky

Dodano 09.11.2014r. o 16:05
Może jakaś podpowiedź jak wykorzystać te dane do identyfikacji proxy? Smile

spływy liwcem

Dodano 09.01.2014r. o 10:32
Przydatne zwłaszcza te informacje o proxy, dzięki Smile

Gothdo

Dodano 03.06.2013r. o 10:04
No, jak proszą o komentarz to zostawiam Razz. Przydało mi się.

Devilart

Dodano 29.05.2013r. o 18:11
Dzięki właśnie tego szukałem. Nie chciało mi się szukać w manualu i kodach swoich stron. Pozdro

Thelleo

Dodano 05.09.2012r. o 15:32
Dzięki ;) Przydało mi się to gdy wprowadziłem CloudFlare na moje strony.

CapaciousCore

Dodano 17.04.2012r. o 19:35
Możesz. Dodatkowo możesz wykorzystać mechanizm ciasteczek aby mieć większa pewność. Przykład znajdziesz w artykule dotyczącym anty-floodowania.

ZacnyUser

Dodano 17.04.2012r. o 01:05
Czyli jest to metoda na wykrycie IP, tak?

Mogę tak zdobyte IP wykorzystać do zanotowania unikalnego wejścia na stronę?

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)