user1529476
user1529476

Reputation:

IP Address With Java

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..?

Upvotes: 4

Views: 1274

Answers (4)

user3032819
user3032819

Reputation: 595

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());

Upvotes: 0

Mitch Connor
Mitch Connor

Reputation: 766

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);
}

Upvotes: -1

David Kroukamp
David Kroukamp

Reputation: 36423

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:

Upvotes: 7

asteri
asteri

Reputation: 11572

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()

Upvotes: 1

Related Questions