我目前使用下面的代码来获取IPv4地址:如何在Akka/Spray框架中获取客户端的IPv6地址?
import spray.http.RemoteAddress
...
val ipV4: String = remoteAddress.toOption.map(_.getHostAddress).getOrElse("<unknown>")
不过,我似乎无法找到做同样的事情对IPv6的任何信息。任何援助对此将不胜感激。
我目前使用下面的代码来获取IPv4地址:如何在Akka/Spray框架中获取客户端的IPv6地址?
import spray.http.RemoteAddress
...
val ipV4: String = remoteAddress.toOption.map(_.getHostAddress).getOrElse("<unknown>")
不过,我似乎无法找到做同样的事情对IPv6的任何信息。任何援助对此将不胜感激。
它不取决于你的方法 - 它取决于你的网络配置。
的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
我不确定这是否回答我的问题。您的答案意味着我的代码正在接收InetAddress的IPv4实例。那么,我如何从Akka/Spray框架获取InetAddress的IPv6实例呢? – chaotic3quilibrium
同样的方法。它不取决于你的方法 - 它取决于你网络的配置。尝试在网络接口配置为使用ipv6的本地PC上运行代码,您将看到。 –
如果您将更新您的答案,包括您刚才在评论中所说的内容,我会接受它。和tysvm创造答案。 – chaotic3quilibrium
根据该文件,'RemoteAddress.toOption'封装了'java.net.InetAddress'这是一个抽象类,双方IPv4和IPv6地址扩展。假设'remoteAddress'具有IPv6地址,那么您的当前代码应该可以正常工作。 –
@IanMcLaird啊。好的。那么,如何获得远程地址的IPv6版本(与当前提供的IPv4相反)呢? – chaotic3quilibrium
在只能通过IPv6访问的计算机上运行代码。您不需要更改代码。你会得到连接的远程机器的地址。它一次只能从一个地址连接到您。 –