Search code examples
javanetwork-programmingip-addressexternal

Getting the 'external' IP address in Java


I'm not too sure how to go about getting the external IP address of the machine as a computer outside of a network would see it.

My following IPAddress class only gets the local IP address of the machine.

public class IPAddress {

    private InetAddress thisIp;

    private String thisIpAddress;

    private void setIpAdd() {
        try {
            InetAddress thisIp = InetAddress.getLocalHost();
            thisIpAddress = thisIp.getHostAddress().toString();
        } catch (Exception e) {
        }
    }

    protected String getIpAddress() {
        setIpAdd();
        return thisIpAddress;
    }
}

Solution

  • I am not sure if you can grab that IP from code that runs on the local machine.

    You can however build code that runs on a website, say in JSP, and then use something that returns the IP of where the request came from:

    request.getRemoteAddr()

    Or simply use already-existing services that do this, then parse the answer from the service to find out the IP.

    Use a webservice like AWS and others

    import java.net.*;
    import java.io.*;
    
    URL whatismyip = new URL("http://checkip.amazonaws.com");
    BufferedReader in = new BufferedReader(new InputStreamReader(
                    whatismyip.openStream()));
    
    String ip = in.readLine(); //you get the IP as a String
    System.out.println(ip);