如何在Akka / Spray框架中获取客户端的IPv6地址?

时间:2015-09-25 17:21:37

标签: scala akka ipv6 spray ipv4

我目前正在使用以下代码获取IPv4地址:

import spray.http.RemoteAddress
...
val ipV4: String = remoteAddress.toOption.map(_.getHostAddress).getOrElse("<unknown>")

但是,我似乎无法找到有关为IPv6做同样事情的任何信息。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

它不依赖于您的方法 - 它取决于您的网络配置。

spray.http.RemoteAddress

Look at the source code

def apply(bytes: Array[Byte]): RemoteAddress = {
    require(bytes.length == 4 || bytes.length == 16)
    try IP(InetAddress.getByAddress(bytes)) catch { case _: UnknownHostException ⇒ Unknown }
}

此代码包含IPv4(4字节)和IPv6(16字节)。因此,您将收到IPv4地址,IPv6地址或特殊的Pv4映射到IPv6地址取决于您的网络设置。

尝试在配置为使用IPv6的网络接口的本地PC上运行代码,您将看到。

这是您实际从Java获得的对象:http://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html