4

ユーザーの IP アドレスを取得するにはどうすればよいですか?

InetAddress ip;
try {

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

} catch (UnknownHostException e) {

e.printStackTrace();

 }

それが返す:127.0.0.1

私はそれが私の IP ではないことを知っています。私のローカルIPアドレスです。Java を使用してユーザー IP を取得するにはどうすればよいですか?

4

4 に答える 4

7

最短の方法は次のとおりです。

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

ただし getLocalHost、ドキュメントには次のように書かれています。

セキュリティマネージャがある場合、そのcheckConnectメソッドは、ローカルホスト名と引数として-1を指定して呼び出され、操作が許可されているかどうかを確認します。操作が許可されていない場合、ループバックアドレスを表すInetAddressが返されます。

場合によってInetAddress.getLocalHost()は、インターフェイスを参照せず、定数127.0.0.1(IPv4の場合)を返すだけです)

NetworkInterface.getNetworkInterfacesはあなたがすべての可能性を列挙するために必要なものだと思います。これは、仮想アドレスを表示しないが、「メイン」インターフェースで機能する例です。

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

または:

これを使用してみてください(最初の出力はPC名の後のIPである必要があります):

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

参照

于 2012-08-13T19:38:13.163 に答える
1

電話をかけるgetLocalHost()と、接続しているルーターの相対アドレスが求められます。これは (予想どおり)127.0.0.1です。を使用して IP アドレスを特定するにはInetAddress、次を試してください。

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

getAllByName(String)あなたの目的に役立つかもしれない方法もあります。javadoc を読んでください。

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

于 2012-08-13T19:42:40.837 に答える
-1

これにより、現在使用されているインターフェイス アドレスが返されます。

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);
}
于 2012-08-13T22:59:14.047 に答える