2015-04-28 32 views
8

Sto cercando di sviluppare un'applicazione Web Java (Servlet) che è necessario per ottenere l'indirizzo IP dei client.Come ottenere l'indirizzo IP del client in Java HttpServletRequest

Si prega di non considerare questo come una domanda duplicata perché ho provato tutte le possibili risposte che sono disponibili nello stackoverflow.

seguito è il mio codice finora:

1)

String ipAddress = request.getRemoteAddr(); 

In questo caso la maggior parte del tomo ottengo la 'porta indirizzo predefinito' (147.120.1.5). non è l'indirizzo IP della mia macchina (174.120.100.17).

2)

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

In questo caso la maggior parte del tomo ottengo la 'porta indirizzo predefinito' (147.120.1.5). non è l'indirizzo IP della mia macchina (174.120.100.17).

3)

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

In questo caso ho avuto l'indirizzo IP del server (147.120.20.1).

Il mio indirizzo IP in 147.120.100.17.Ora non so come ottenere l'indirizzo IP del client reale. Per favore, fai una risposta

Grazie mille.

+0

Non c'è modo preciso per ottenere l'indirizzo IP client meno che il cliente in modo esplicito lo manda a voi –

+0

c'è non è un modo per ottenere il vero indirizzo IP del client, quello che vedi effettivamente, è il tuo indirizzo IP pubblico. –

+0

possibile duplicato di [E 'possibile determinare con precisione l'indirizzo IP di un client nel servlet java] (http://stackoverflow.com/questions/9326138/is-it-possibile-per-accuratamente-determinare-il-ip- address-of-a-client-in-java-servle) – YoYo

risposta

22

Prova questo,

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

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

+0

Quando uso il codice sopra, sto ricevendo 'localhost' non il mio indirizzo IP. –

+3

L'intestazione X-FORWARD-FOR è un po 'rischiosa qui. Perché se si utilizza il proxy inverso per la richiesta, questo valore di intestazione sarà simile a questo: 231.23.45.65, 10.20.10.33, 10.20.20.34 (che significa ip del client, server di bilanciamento del carico, server proxy inverso). Controlla se il tuo valore dell'intestazione X-FORWARD-FOR contiene "," o meno. '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);  
} 
} 

uscita:

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

Questo non risponde alla domanda. La domanda riguarda l'indirizzo IP del client e non i server (localhost). –

Problemi correlati