Próbuję wydrukować adres IP zalogowanego użytkownika w mojej aplikacji webowej. Jeśli użytkownik łączy się z innym komputerem PC (znajdującym się w tej samej sieci, co aplikacja internetowa działająca na moim komputerze) przy użyciu adresu IP 192.168.10.120:8080/WebApplication
, jego kod IP zwróci kod request.getRemoteAddr()
lub request.getLocalAddr())
. Kiedy loguję się z komputera, na którym uruchamiam aplikację internetową, otrzymuję ten adres IP 0: 0: 0: 0: 0: 0: 0: 1.
Dlaczego tak jest? Jaka jest różnica między tymi poleceniami (których powinienem użyć?). Dziękuję bardzo!Użycie request.getRemoteAddr() zwraca 0: 0: 0: 0: 0: 0: 0: 1
Odpowiedz
W twoim przypadku, próbujesz uzyskać do niego dostęp na komputerze lokalnym, więc zwróci tę wartość. Ale niech jeden z dostępem go znajomemu, a otrzymasz oczekiwany rezultat z getRemoteAddr
Z javadoc:
getRemoteAddr - zwraca adres IP klienta lub ostatniego pełnomocnika, który wysłał żądanie
getLocalAddr - Zwraca adres IP interfejsu, na który otrzymano żądanie.
getRemoteAddr() rozwiązuje swój cel, ale jeśli klient jest za każdym pełnomocnika następnie otrzymasz adres IP serwera proxy:
Zwraca Internet Protocol (IP) Adres strony klienta lub ostatniego pełnomocnika który wysłał żądanie.
getLocalAddr() zwraca IP serwera aplikacji jest uruchomiony.
Gdy przechodzimy do IPv6 z IPv4, zmieniają adres pętli zwrotnej (localhost) na 0:0:0:0:0:0:0:1
z 127.0.0.1
, dlatego otrzymujesz ten adres.
chodzi o funkcje:
getRemoteAddr()
zwraca klientom IPgetLocalAddr()
zwraca IP serwera aplikacja jest uruchomiony na
zamiast podawać adres URL jako "http://localhost:port/" podaj adres URL jako "http://IP:port/" Otrzymasz adres zdalny.
To nie odpowiada na pytanie i są już zaakceptowane odpowiedzi. – ziggystar
localhost zwróci ten adres IP. Na innych komputerach zobaczysz rzeczywiste IP. – Makky
Dzięki @Makky Czy znasz różnicę między tymi 2 poleceniami? – yaylitzis
'getLocalAddr()' pobiera adres IP urządzenia, aby odebrać żądanie. [Źródło] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocalAddr()). Natomiast 'getRemoteAddr()' uzyskuje adres IP urządzenia, aby zażądać zasobu [Źródło] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr()). –