2016-07-15 334 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地址流量**來自哪裏。這並不一定意味着你的機器可以通過該地址到達。 –

相關問題