使用scala获取当前计算机的公共IP地址

我想获得一个IP地址,可以使用scala在我的机器或局域网外部访问。

用例场景:Web服务正在计算机上运行。 在其响应中,它应该返回其端点之一的URL。 所以现在我必须提供运行Web服务的机器的IP

我使用NetworkInterface.getNetworkInterfaces()来获取主机上所有已知的网络接口,然后迭代每个NI的地址。 但在这种情况下,我得到了许多IP地址。 如何从所有这些中找出正确的IP。 以下是scala中的代码段:

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) } 

你必须使用像这里提到的whatismyip这样的外部服务

等效的scala代码将是,

 def ipAddress(): String = { val whatismyip = new URL("http://checkip.amazonaws.com"); val in:BufferedReader = new BufferedReader(new InputStreamReader( whatismyip.openStream())); return in.readLine() }