Reputation:
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
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
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
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
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