【发布时间】:2016-07-15 09:26:54
【问题描述】:
我想获得一个可以在我的机器或局域网之外使用 scala 访问的 IP 地址。
用例场景:Web 服务正在机器上运行。在其响应中,它应该返回其端点之一的 url。所以现在我必须提供运行 Web 服务的机器的 IP
我使用 NetworkInterface.getNetworkInterfaces() 来获取主机上所有已知的网络接口,然后遍历每个 NI 的地址。但在这种情况下,我得到了很多 IP 地址。我怎样才能从所有这些中找出正确的 IP。 下面是scala中的sn-p代码:
private def ipAddress: String = {
val enumeration = NetworkInterface.getNetworkInterfaces.asScala.toSeq
val ipAddresses = enumeration.flatMap(p =>
p.getInetAddresses.asScala.toSeq
)
val address = ipAddresses.find { address =>
val host = address.getHostAddress
host.contains(".") && !address.isLoopbackAddress && !address.isAnyLocalAddress && !address.isLinkLocalAddress
}.getOrElse(InetAddress.getLocalHost)
}
【问题讨论】:
-
这不是 Scala 问题。仅从 IP 列表中无法回答。什么是“正确”地址取决于您机器周围的网络路由。可能没有外部可访问的地址(例如,这对于我正在输入的机器来说是正确的)。因此,请详细说明您的方案以及您正在尝试做的事情。
-
还有其他几个问题可以解决这个问题。参见,例如stackoverflow.com/questions/1145899/…
-
网络服务正在机器上运行。在其响应中,它应该返回其端点之一的 url。所以现在我必须提供运行 Web 服务的机器的 IP。
-
如果有多个接口,则没有单一的“机器IP”。而且它拥有的任何 IP 都不一定是外部使用的 IP - 例如,如果有 Web 代理或端口转发。因此,您需要解释 Web 客户端在哪里,并了解流量将如何从客户端传输到服务器。然后你就可以确定哪个 IP 地址可能是相关的。
标签: java scala sockets networking ip