Java 如何检查InetAddress是使用主机名还是IP地址创建的?

Java 如何检查InetAddress是使用主机名还是IP地址创建的?,java,dns,inetaddress,Java,Dns,Inetaddress,我想知道一个InetAddress对象是否在构造时使用主机名或IP地址初始化。有没有办法在java中检查这一点 是的,你可以 InetAddress.toString()返回以下格式的字符串表示:主机名/IP地址。如果主机名未知(使用IP地址创建实例时发生这种情况),则第一部分为空 以下代码片段: System.out.println(InetAddress.getByName("localhost").toString()); System.out.println(InetAd

我想知道一个InetAddress对象是否在构造时使用主机名或IP地址初始化。有没有办法在java中检查这一点

是的,你可以

InetAddress.toString()
返回以下格式的字符串表示:
主机名/IP地址
。如果主机名未知(使用IP地址创建实例时发生这种情况),则第一部分为空

以下代码片段:

    System.out.println(InetAddress.getByName("localhost").toString());
    System.out.println(InetAddress.getByName("127.0.0.1").toString());
    System.out.println(InetAddress.getByName("www.google.com").toString());
    System.out.println(InetAddress.getByName("173.194.113.145").toString());
打印此输出:

localhost/127.0.0.1
/127.0.0.1
www.google.com/173.194.113.144
/173.194.113.145
因此,你可以说:

public static boolean isCreatedFromIp(InetAddress addr) {
    return addr.toString().startsWith("/");
}
编辑:我没有用IPv6检查这一点,但是我相信存在类似的解决方案,因为
toString()
实现不依赖于IP版本。

是的,您可以

InetAddress.toString()
返回以下格式的字符串表示:
主机名/IP地址
。如果主机名未知(使用IP地址创建实例时发生这种情况),则第一部分为空

以下代码片段:

    System.out.println(InetAddress.getByName("localhost").toString());
    System.out.println(InetAddress.getByName("127.0.0.1").toString());
    System.out.println(InetAddress.getByName("www.google.com").toString());
    System.out.println(InetAddress.getByName("173.194.113.145").toString());
打印此输出:

localhost/127.0.0.1
/127.0.0.1
www.google.com/173.194.113.144
/173.194.113.145
因此,你可以说:

public static boolean isCreatedFromIp(InetAddress addr) {
    return addr.toString().startsWith("/");
}

编辑:我没有用IPv6检查这一点,但是我相信存在类似的解决方案,因为
toString()
实现不依赖于IP版本。

不,您不能;但是出于好奇,你为什么想知道?不,你不能;但是出于好奇,你为什么想知道呢?谢谢你。我想知道为什么我所有的日志地址都以a/开头,谢谢。我想知道为什么我所有记录的地址都以/