21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
MONTYCEK
Profil
Zdravím, používal jsem pro zjištění IP adresy uživatele proměnnou $_SERVER['REMOTE_ADDR'], ale nedávno jsem narazil na problém s tím, že tato proměnná obsahovala IP adresu serveru místo té kterou má návštěvník stránky. Jak tedy získat tu správnou IP?
sitole
Profil
Tady máš něco podobného TADY

V php se IP návštevníka definuje jako $_SERVER["REMOTE_ADDR"]

Také uvedu hotové řešení s echo

<?php
$adresa = $_SERVER['REMOTE_ADDR'];
echo "Našel jsem tvou bagetu! Tvoje IP je: $adresa";
?>
juriad
Profil
sitole:
Hm, nemáš obecně pravdu. Toto navíc MONTYCEK ví a řeší, proč to nefunguje.

MONTYCEK:
Pročti si tato vlákna:
stackoverflow.com/questions/4773969/is-it-safe-to-trust-serverremote-addr
stackoverflow.com/questions/4262081/serverremote-addr-gives-server-ip-rather-than-visitor-ip
Použij ještě HTTP_X_FORWARDED_FOR kvůli proxy.
MONTYCEK
Profil
sitole:
Toto právě znám, ale problém je že jsem narazil i na situaci kdy tato hodnota neobsahovala IP návštěvníka, ale ip adresu serveru.
bestik_63
Profil
Jseš si jistý že návštěvník nebyl robot? Na stránky ti kromě uživatelů chodí spousta robotů a pak bys samozřejmě neviděl adresu PC, ale adresu serveru, kde je tento robot spuštěn. Také může uživatel přicházet ze sítě, která je skrytá pomocí NAT apod. To pak také neuvidíš jeho adresu, za kterou je tato skrytá síť. Existuje spousta důvodů, proč je tam jiná adresa.
MONTYCEK
Profil
bestik_63:
Ta ip adresa je shodná s ip adresou serveru na kterém běží ten web.
Takžed třeba u knihy návštěv vidíš všechny přispívající vždy s jednou a tom samou IP adresou.
juriad
Profil
MONTYCEK:
var_dump($_SERVER);
A podívej se, zda tam někde tu IP adresu neuvidíš :)
MONTYCEK
Profil
juriad:
Zkoušel jsem si to vypsat pomocí print_r a našel jsem proměnnou, která ip adresu obsahovala. Teď nevím jak se tato proměnná jmenovala, ale vím že obsahovala 2 hodnoty oddělené čárkou a to ip serveru a ip návštěvníka. První co mě napadlo bylo že bych to třeba pomocí explode rozdělil a vzal si tu druhou hodnotu, ale vím, že jsem na stejný problém narazil už dřívě a tam tato proměnná obsahovala více hodnot než jenom dvě.
juriad
Profil
Ano, použij explode. Také počítej s tím, že této hlavičce nelze věřit. Nejsem si jistý, že chceš vždy poslední položku, protože uživatel může mít proxy v lokální síti a dozvěděl by ses jen adresu v jeho lokální síti.
Musíš tomu dát větší inteligenci.
bestik_63
Profil
ahoj,
tento týden si zrovna hraju s funkcí file_get_contents a hlavičkami : stream_context_create a je zvláštní jaké věci jdou nastavit. Bez větších problémů jsem nastavil user-agent, referer apod. Nejsem si jistý jestli to jde, ale IP se třeba dá pomocí http hlavičky nastavit také. To je na polemice ostatních. Nicméně ale podle toho co zde píšeš to asi jde (třeba jinak). Nicméně pokud někdo chce by byl skryt, asi budeš těžko hledat jeho původní adresu. Pokud těchto přístupů není extra moc, tak bych tomu nevěnoval příliš mnoho pozornosti :-)
MONTYCEK
Profil
bestik_63:
no ale běžný uživatel, který nemá znalosti o tom jak podstrčit nějaké hlavičky asi těžko změní ip.
juriad
Profil
bestik_63:
IP adresu nelze takto jednoduše zfalšovat (z důvodů fungování protokolu IP). Ale každý NAT nebo proxy na cestě k serveru IP adresu přepisuje a jakoby přepošle dotaz svým jménem. Ty příklady, které jsi uvedl můžeš změnit přímo v prohlížeči, nebo je úplně zakázat.
Tady jde o to, že MONTYCEKovi všechny přístupy jdou přes proxy hostingu. Slušné proxy servery přidávají hlavičku HTTP_X_FORWARDED_FOR, takže platí, že informace v REMOTE_ADDR bez proxy u hostingu je stejná jako druhá položka HTTP_X_FORWARDED_FOR v případě proxy.
bestik_63
Profil
[#12] juriad
No jo to je pak jiná. Já myslel že je to pro pár případů a ne pro všechny. Ale je to zajímavá informace :-) Díky za vysvětlení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0