2015-04-28 23 views
8

Próbuję utworzyć aplikację internetową Java (Servlet), której potrzebuję, aby uzyskać adres IP klienta.Jak uzyskać adres IP klienta w Javie HttpServletRequest

Proszę nie traktować tego jako duplikatu, ponieważ próbowałem wszystkich możliwych odpowiedzi, które są dostępne w stackoverflow.

Poniżej mój kod do tej pory:

1)

String ipAddress = request.getRemoteAddr(); 

W tym przypadku większość tomie pojawia się domyślny adres bramy '' (147.120.1.5). nie mój adres IP komputera (174.120.100.17).

2)

String ipAddress = request.getHeader("X-FORWARDED-FOR"); 
    if (ipAddress == null) { 
     ipAddress = request.getRemoteAddr(); 
    } 

W tym przypadku większość tomie pojawia się domyślny adres bramy '' (147.120.1.5). nie mój adres IP komputera (174.120.100.17).

3)

InetAddress IP=InetAddress.getLocalHost(); 
System.out.println(IP.getHostAddress()); 

W tym przypadku dostałem adres serwera IP (147.120.20.1).

Mój adres IP w 147.120.100.17. Teraz nie wiem, jak uzyskać prawdziwy adres IP klienta. Proszę, odpowiedz.

Dziękuję bardzo.

+0

Nie ma dokładny sposób, aby uzyskać adres IP klienta, chyba że klient wyraźnie przesyła ci to –

+0

Jest nie jest sposobem na uzyskanie prawdziwego adresu IP klienta, co faktycznie pokazuje twój publiczny adres IP. –

+0

możliwy duplikat [Czy możliwe jest dokładne określenie adresu IP klienta w serwletce java] (http://stackoverflow.com/questions/9326138/is-it-possible-to-accurately-determine-the-ip- adres-klienta-w-java-servle) – YoYo

Odpowiedz

22

Spróbuj tego,

String ipAddress = request.getHeader("X-FORWARDED-FOR"); 
     if (ipAddress == null) { 
     ipAddress = request.getRemoteAddr(); 
    } 

referencyjny: http://www.mkyong.com/java/how-to-get-client-ip-address-in-java/

+0

Kiedy używam powyższego kodu, otrzymuję "localhost", a nie mój adres IP. –

+3

Nagłówek X-FORWARD-FOR jest tutaj nieco ryzykowny. Ponieważ jeśli używasz odwrotnego proxy dla żądania, ta wartość nagłówka będzie wyglądać następująco: 231.23.45.65, 10.20.10.33, 10.20.20.34 (co oznacza adres IP klienta, serwer równoważenia obciążenia, serwer odwrotnego proxy). Sprawdź, czy wartość nagłówka X-FORWARD-FOR zawiera "," czy nie. 'ipAddress.contains (", ")? ipAddress.split (",") [0]: ipAddress' – utkusonmez

-2
import java.net.UnknownHostException; 

/** 
* Simple Java program to find IP Address of localhost. This program uses 
* InetAddress from java.net package to find IP address. 
* 
*/ 
public class IPTest { 

public static void main(String args[]) throws UnknownHostException { 

    InetAddress addr = InetAddress.getLocalHost(); 

    //Getting IPAddress of localhost - getHostAddress return IP Address 
    // in textual format 
    String ipAddress = addr.getHostAddress(); 

    System.out.println("IP address of localhost from Java Program: " + ipAddress); 

    //Hostname 
    String hostname = addr.getHostName(); 
    System.out.println("Name of hostname : " + hostname);  
} 
} 

wyjściowa:

IP address of localhost from Java Program: 190.12.209.123 
Name of hostname : PCLOND3433 
+3

To nie odpowiada na pytanie. Pytanie dotyczy adresu IP klienta, a nie serwerów (localhost). –