문제점 설명에 IPv4 주소 또는 v4 매핑 된 v6 주소를 InetSocketAddress 인스턴스로받을 수 있다고 나와 있습니다. v4 매핑 된 v6 주소 인 경우 v4 주소를 파생시켜 사용해야합니다.주어진 IPv4 매핑 된 IPv6 주소에서 IPv4 주소를 추출하려고 시도합니다.
나는 된 InetAddresses의 자바 독을 읽고 있던이는 말씀입니다 :
`Technically one can create a 128bit IPv6 address with the wire format of a
"mapped" address, as shown above, and transmit it in an IPv6 packet header.
However, Java's InetAddress creation methods appear to adhere doggedly to the
original intent of the "mapped" address: all "mapped" addresses return
Inet4Address objects.`
수신 주소가 하나이 같은이 라이브러리의 방법을 사용 V4 맵 V6 주소 인 경우 내가 확인할 수 있습니다
// Input is InetSocketAddress socketAddress
if (InetAddresses.isMappedIPv4Address(socketAddress.getAddress().getHostAddress())) {
System.out.println("This is a v4 mapped v6 address");
}
설명서에 따라 라이브러리 (InetSocketAddress, InetAddress 또는 InetAddresses) 중 아무 것도 매핑 된 입력에서 IPv4 주소를 파생시키는 방법을 제공하지 않습니다. InetAddress에서 InetSocketAddress로받은 InetAddress를 Inet4Address로 형식 변환하는 것으로 충분합니까?
Inet4Address inetAddress = (Inet4Address) socketAddress.getAddress();
그렇다면 InetAddresses.isMappedIPv4Address를 사용해야합니까? 적절한 예외를 throw 할 수 있도록 캐스팅에 실패했거나 지정된 주소가 유효한 IPv4 주소 또는 v4 매핑 된 v6 주소가 아닌지 어떻게 확인할 수 있습니까?