相关疑难解决方法(0)

InetAddress.getCanonicalHostName()返回IP而不是Hostname

我在堆栈溢出中寻找了如何在Java中进行IP查找,但答案与我已经在做的事情相匹配,并没有解决我的问题.

这是我的代码:

public void printHostname( String ip ) {
    System.out.println( InetAddresses.forString( ip ).getCanonicalHostName( ) );
}
Run Code Online (Sandbox Code Playgroud)

InetAddresses只是一个来自番石榴库的实用程序类来获取InetAdress.

问题:此代码与某些IP地址一样正常工作,而不是与其他IP地址一起工作.

一个工作的例子

例如,对于IP 157.55.39.29,输出为:

msnbot-157-55-39-29.search.msn.com
Run Code Online (Sandbox Code Playgroud)

根据Linux host命令,这个结果似乎是正确的:

> host 157.55.39.29
29.39.55.157.in-addr.arpa domain name pointer msnbot-157-55-39-29.search.msn.com.
Run Code Online (Sandbox Code Playgroud)

一个不成功的例子

对于IP 123.125.71.75,该host命令返回:

> host 123.125.71.75
75.71.125.123.in-addr.arpa domain name pointer baiduspider-123-125-71-75.crawl.baidu.com.
Run Code Online (Sandbox Code Playgroud)

但是我的Java代码的输出是:

123.125.71.75
Run Code Online (Sandbox Code Playgroud)

而预期的产出应该是

baiduspider-123-125-71-75.crawl.baidu.com
Run Code Online (Sandbox Code Playgroud)

getCanonicalHostName方法的javadoc 说:

返回:
此IP地址的完全限定域名,或者如果安全检查不允许操作,则返回 IP地址的文本表示形式.

但我很确定这不是一个安全检查的问题......或者我不明白什么是错的.

你有什么建议来解释这种行为吗?你有解决方法吗?

编辑#1

在寻找解决方案时,我尝试在JDK中调试实现:

// first lookup the hostname
host = nameService.getHostByAddr(addr.getAddress());

/* check to see if calling code is …
Run Code Online (Sandbox Code Playgroud)

java dns gethostbyaddr

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

dns ×1

gethostbyaddr ×1

java ×1