Java-библиотека IPAddress может выполнить то, что вы здесь описываете.
IPv6-адреса - 16 байтов. Используя эту библиотеку, если вы начинаете с 16-байтового массива, вы можете создать объект адреса IPv6:
IPv6Address addr = new IPv6Address(bytes); //bytes is byte[16]
Оттуда вы можете проверить, сопоставлен ли адрес IPv4, совместим с IPv4, переведен IPv4 и т. Д. (Существует множество возможных способов, с помощью которых IPv6 представляет адреса IPv4). В большинстве случаев, если адрес IPv6 представляет адрес IPv4, адрес ipv4 находится в младших 4 байтах, и поэтому вы можете получить производный адрес IPv4 следующим образом. После этого вы можете преобразовать обратно в байты, которые будут только 4 байта для IPv4.
if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) {
IPv4Address derivedIpv4Address = addr.getEmbeddedIPv4Address();
byte ipv4Bytes[] = derivedIpv4Address.getBytes();
...
}
Javadoc доступен по ссылке.