InetAddress类的getLocalHost()不会在C返回预期的IP地址:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主机

问题描述:

在文件C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主机我只有以下行InetAddress类的getLocalHost()不会在C返回预期的IP地址: WINDOWS SYSTEM32 DRIVERS 等主机

192.168.0.23 computername.domain.com computername 

当我运行

InetAddress localhost = InetAddress.getLocalHost(); 
System.out.println("getLocalHost:" + localhost); 

我希望可以将输出为

getLocalHost:computername/192.168.0.23 

但它出来作为

getLocalHost:computername/192.168.0.107 

任何想法为什么发生这种情况?是否应该在其他文件中进行配置?

EDIT

InetAddress.getByName('computername') 

产生相同的IP作为getLocalHost()一样。

+2

您为什么期望来自主机文件的条目影响本地主机的IP地址?我期望如果你做一个InetAddress.getByName('computername'),那会给你你想要的IP地址。 – 2011-04-28 03:19:27

getLocalHost()返回其中一个网络适配器的实际IP。如果在命令行中执行ipconfig,则其中一个适配器应返回相同的地址。

如果您有多个适配器并希望使用特定的适配器,则需要使用NetworkInterface.getNetworkInterfaces(),然后从每个接口拉出InetAddress列表。

+0

是的,一般'InetAddress.getLocalHost()'应该避免。人们只需要认识到,从该方法的答案只有HAPPENS给你期望的结果。场景:您的应用已运行良好多年。然后你将它移动到一个多宿主主机,并且砰!它会像你期望的那样停止工作。士气:除了文本信息以外,不要依赖'InetAddress.getLocalHost()'。我已经提出了这个答案。 – peterh 2013-10-03 07:19:42

为什么hosts文件中的条目会影响IP地址localhost

InetAddress.getByName('computername')应该给你你期望的IP地址。

+1

感谢您的帮助,但不是,它给出了与getLocalHost() – 2011-04-28 03:51:25

+0

一样的可能,但可能不会。主机文件不是唯一的,并不总是名称到地址映射的主要来源。在Windows下,您至少拥有DNS和WINS。 – 2011-04-28 04:04:02

+0

在Windows上,我认为主机文件条目将是查找名称解析的第一件事,这就是为什么大多数反恶意软件软件都会在主机文件中为已知的恶意软件服务主机添加回送地址映射,从而阻止浏览到域名。 [不确定,但我发现的第一个来源]。(http://vlaurie.com/computers2/Articles/hosts.htm) – 2011-04-28 04:43:13