java - getLocalHost 和 getByName ("localhost"的 IP 地址不同)..为什么会这样?

标签 java inetaddress

在什么情况下InetAddress.getLocalHost().getHostAddress()返回的IP地址与InetAddress.getByName("localhost")不同?

在我的系统上,一个返回 192.168.0.2,而另一个返回 127.0.0.1

最佳答案

看来,InetAddress.getLocalHost().getHostAddress()正在返回您的系统IP,而InetAddress.getByName("localhost")则返回环回地址。

我对 Parthian 描述的 getByName 安全管理器案例表示怀疑,
根据 getByName() 的 InetAddress API 规范: http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getByName%28java.lang.String%29

该方法抛出:SecurityException - 如果安全管理器存在并且其 checkConnect 方法不允许该操作。

而 getLocalHost() 不会抛出任何此类异常,而是返回环回地址作为故障安全。 http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getLocalHost%28%29

getByName() 需要连接到 DNS 来解析主机名。 在这种情况下, getByName() 正在从/etc/hosts(linux) 或 C:\Windows\System32\drivers\etc (windows) 解析“localhost”。用户可以在这些文件中配置主机名 ip 对。 要进行检查,您可以向 localhost 提供任何值,例如:hosts 文件中的 localhost 127.0.0.2,getByName 将返回它。

关于java - getLocalHost 和 getByName ("localhost"的 IP 地址不同)..为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24037443/

相关文章:

java - android ping InetAddress 和 editText

java - 奇怪的 InetAddress.isReachable() 问题

java - 服务器套接字错误

Java - 如何调用 IP 地址来查找主机名?

java - 计算嵌套循环中的平均数 Java

java - 在迭代时从列表中删除对象不起作用(使用迭代器)

java - GWT开发模式错误

JAVA,棋盘游戏。随机骰子数字不是随机的

java - DOM4J xpath-选择带有命名空间的冒号节点

java - Android studio 库项目依赖