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

时间:2016-07-15 09:26:54

标签: java scala sockets networking ip

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

用例场景: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)

}

1 个答案:

答案 0 :(得分:1)

您必须使用像所提到的here

之类的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()
}