2015-04-28 7 views
8

Ich versuche, eine Java-Webanwendung (Servlet) zu entwickeln, die ich brauche, um die IP-Adresse des Clients zu erhalten.Wie bekomme ich Client-IP-Adresse in Java? HttpServletRequest

Bitte betrachten Sie dies nicht als doppelte Frage, weil ich alle möglichen Antworten ausprobiert habe, die im Stackoverflow verfügbar sind.

Im Anschluss an mein Code so weit:

1)

String ipAddress = request.getRemoteAddr(); 

In diesem Fall die meisten der Band Ich erhalte die 'Standard-Gateway-Adresse' (147.120.1.5). nicht meine IP-Adresse (174.120.100.17).

2)

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

In diesem Fall die meisten der Band Ich erhalte die 'Standard-Gateway-Adresse' (147.120.1.5). nicht meine IP-Adresse (174.120.100.17).

3)

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

In diesem Fall habe ich die Server-IP-Adresse bekommen (147.120.20.1).

Meine IP-Adresse in 147.120.100.17. Jetzt weiß ich nicht, wie man die reale Client-IP-Adresse bekommt. Bitte mach eine Antwort.

Vielen Dank.

+0

Es gibt keine genaue Methode ist explizit die Client-IP-Adresse, es sei denn der Kunde zu erhalten sendet es an Sie –

+0

Es gibt nicht die reale IP-Adresse des Kunden zu bekommen, was Sie dort sehen, ist Ihre öffentliche IP-Adresse. –

+0

mögliches Duplikat von [Ist es möglich, die IP-Adresse eines Clients im Java-Servlet genau zu bestimmen] (http://stackoverflow.com/questions/9326138/is-it-possible-to-accurate-determine-the-ip- address-a-client-in-java-servle) – YoYo

Antwort

22

versuchen diese,

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

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

+0

Wenn ich den obigen Code verwende, bekomme ich "localhost" nicht meine IP-Adresse. –

+3

X-FORWARD-FOR Header ist hier ein wenig riskant. Wenn Sie Reverseproxy für die Anforderung verwenden, lautet dieser Headerwert wie folgt: 231.23.45.65, 10.20.10.33, 10.20.20.34 (was Client-IP, Load Balancer-Server, Reverse-Proxy-Server bedeutet). Überprüfen Sie, ob Ihr X-FORWARD-FOR-Headerwert ',' enthält oder nicht. '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);  
} 
} 

Ausgang:

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

Dies beantwortet die Frage nicht. Frage ist über Client-IP-Adresse nicht Server (localhost). –

Verwandte Themen