views:

1028

answers:

2

I have a need to capture IP address of the client in my GWT/GAE (Java) application. Since GAE does not support full set of java.net APIs I cannot do code such as snippet below. Can anyone suggest reliable way of achieving the same?

for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
    final NetworkInterface intf = en.nextElement();
    for (final Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
        final InetAddress ip = enumIpAddr.nextElement();
        if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) {
                return ip.getHostAddress().toString();
        }
    }
}

For Python version one can do:

os.environ['REMOTE_ADDR']

or

String ip = self.request.remote_addr;

But what would be a Java equivalent?

+3  A: 

OK - got it. In your Servlet which should extend RemoteServiceServlet do this:

final String ip = getThreadLocalRequest().getRemoteAddr();
DroidIn.net
A: 

this will only give your web server IP if you are hosting on WebServer->AppServer environment.

nag