[ deepwhite @ 25.04.2010. 13:29 ] @
Pozdrav, radim jedan segment projekta u kome mi je neophodno da znam ip adresu klijenta koji dodje na odredjeni server. Problem nastaje kada korisnik pristupa sa računara iza rutera. Ne mogu da napišem dobru skriptu koja može pročitati lokalnu ip adresu. Tražio sam po netu i našao dosta primera ali ni jedan ne funkcioniše ispravno, bar sa računara sa kojih smo mi testirali. Ja sam na statičnoj IP i ne mogu iz prve ruke testirati funkcionisanje, a sa računara kod prijatelja dobijam IP rutera. Da li je skripta ok?

Code:

<?php
function ipCheck() {
        if (getenv('HTTP_CLIENT_IP')) {
            $ip = getenv('HTTP_CLIENT_IP');
                echo $ip;
        }
        elseif (getenv('HTTP_X_FORWARDED_FOR')) {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
                echo $ip;
        }
        elseif (getenv('HTTP_X_FORWARDED')) {
            $ip = getenv('HTTP_X_FORWARDED');
                echo $ip;
        }
        elseif (getenv('HTTP_FORWARDED_FOR')) {
            $ip = getenv('HTTP_FORWARDED_FOR');
                echo $ip;
        }
        elseif (getenv('HTTP_FORWARDED')) {
            $ip = getenv('HTTP_FORWARDED');
                echo $ip;
        }
        else {
            $ip = $_SERVER['REMOTE_ADDR'];
                echo $ip;
        }
    }
call_user_func ('ipCheck');
?>


Nalazi se na adresi: http://212.200.70.5/112.php




[ Goran Rakić @ 25.04.2010. 13:39 ] @
Sva FORWARDED zaglavlja postavlja proksi, a ne ruter. Znaj i da se ovo zaglavlje može lako lažirati.

Ako želiš da znaš lokalnu IP adresu po svaku cenu moraš se osloniti na Java aplete ili slično što se izvršava na strani klijenta. Upotrebom JavaScripta nije moguće pročitati lokalnu adresu.

Razmisli i šta ako postoji više mrežnih interfejsa na računaru sa različitim IP adresama ili više rutera po liniji u lokalnoj mreži pa ćeš verovatno odustati od cele zamisli hvatanja ip adrese. Ako ti to treba zbog nekog Single-Sign-On mehanizma postavi dostupan server u lokalnoj mreži i odradi autentifikaciju preko njega.