2016-07-15 143 views
0

我想获得一个IP地址,可以使用scala在我的机器或我的LAN之外访问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) 

} 
+0

这不是一个阶题。而且它不仅仅是从IP列表中负责。什么是“正确”的地址将取决于你的机器周围的网络路由。有可能没有外部可达的地址(例如,我打字的机器就是这样)。所以请详细解释你的情况以及你想要做的事情。 –

+3

还有其他几个问题可以解决这个问题。请参阅http://stackoverflow.com/questions/1145899/how-do-i-find-out-what-my-external-ip-address-is –

+0

Web服务正在计算机上运行。在它的响应中,它应该返回一个端点的URL。所以现在我必须提供运行Web服务的机器的IP。 – user2613399

回答

1

你必须使用像whatismyip外部服务如前所述here

等效Scala代码会,

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

请注意,只是告诉你来自**机器的IP地址流量**来自哪里。这并不一定意味着你的机器可以通过该地址到达。 –

相关问题