4

How would I get a users IP address?

InetAddress ip;
try {

 ip = InetAddress.getLocalHost();
 System.out.println("Current IP address : " + ip.getHostAddress());

} catch (UnknownHostException e) {

e.printStackTrace();

 }

That returns: 127.0.0.1

I know that is not my IP. It is my local IP address. How do I get a users IP using java..?

Dummy Code
  • 1,858
  • 4
  • 19
  • 38

4 Answers4

7

The shortest method is:

try {
InetAddress thisIp =InetAddress.getLocalHost();
System.out.println("IP:"+thisIp.getHostAddress());
}
catch(Exception e) {
e.printStackTrace();
}

However getLocalHost docs say:

If there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. If the operation is not allowed, an InetAddress representing the loopback address is returned.

and in some cases InetAddress.getLocalHost() doesn't consult your interfaces, it simply returns constant 127.0.0.1 (for IPv4))

I think NetworkInterface.getNetworkInterfaces is what you need to enumerate all the possibilities. Here's an example which doesn't show virtual addresses, but works for "main" interfaces:

import java.net.*;
import java.util.*;

public class Test
{
    public static void main(String[] args)
        throws Exception // Just for simplicity
    {
        for (Enumeration<NetworkInterface> ifaces = 
               NetworkInterface.getNetworkInterfaces();
             ifaces.hasMoreElements(); )
        {
            NetworkInterface iface = ifaces.nextElement();
            System.out.println(iface.getName() + ":");
            for (Enumeration<InetAddress> addresses =
                   iface.getInetAddresses();
                 addresses.hasMoreElements(); )
            {
                InetAddress address = addresses.nextElement();
                System.out.println("  " + address);
            }
        }
    }
}

Alternatively:

Try using this (First output should be IP after PC name):

    InetAddress[] localaddr;

    String computername = null;

    try {
        computername = InetAddress.getLocalHost().getHostName();//get pc name
    } catch (UnknownHostException ex) {
        ex.printStackTrace();
    }

    System.out.println(computername);

    try {
        localaddr = InetAddress.getAllByName(computername);
        for (int i = 0; i < localaddr.length; i++) {
            System.out.println("\n" + localaddr[i].getHostAddress());
        }
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

References:

Community
  • 1
  • 1
David Kroukamp
  • 36,155
  • 13
  • 81
  • 138
  • Would my IP be : xx.xx.x.xxx That is the third line in the output. –  Aug 13 '12 at 19:47
  • @HenryHarris I'm not sure... what the above method does is loop through all your network interfaces and print out their addresses. Find out your IP then check if you see it in the output http://www.whatsmyip.org – David Kroukamp Aug 13 '12 at 19:50
  • It doesn't find my IP.. O.o on the IP lookup. –  Aug 13 '12 at 19:52
1

When you call getLocalHost() you are asking for the relative address of the router you are connected to, which is (as expected) 127.0.0.1. To determine the IP address using InetAddress, try:

InetAddress.getByName("http://yoururl.com/path/");

There's also a getAllByName(String) method which might serve your purpsoes. Read the javadoc.

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/InetAddress.html#getHostAddress()

asteri
  • 11,402
  • 13
  • 60
  • 84
0

It get IP address of your machine ,

    InetAddress inet= InetAddress.getLocalHost();
    String str[]=inet.toString().split("/");
    for (int i=0;i<str.length;i++)
    System.out.println(inet.toString() +" "+ str[i]);
    InetAddress[] inetAd=InetAddress.getAllByName(str[0]);
    for(int j=0;j<inetAd.length;j++ ){
    System.out.println(inetAd[j].toString());
user3032819
  • 595
  • 1
  • 5
  • 6
-1

This Will return your current used interface address:

NetworkInterface ni;
try {
    Enumeration<NetworkInterface> interfaces NetworkInterface.getNetworkInterfaces();
    while (interfaces.hasMoreElements()) {
        ni = interfaces.nextElement();
        if (ni.isUp()) {
            Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
            while (inetAddresses.hasMoreElements()) {
                InetAddress ia = inetAddresses.nextElement();
                if (!ia.isLinkLocalAddress()) {
                    return ia;
                }
            }
        }
    }
} catch (SocketException ex) {
    throw new RuntimeException(ex);
}
Matt
  • 2,139
  • 1
  • 16
  • 20
Mitch Connor
  • 766
  • 10
  • 19