diff --git a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java index 85a4cde121d8a3be2349e34b96b86e4c047d6f50..222f697eb54505cd308d0518870bb0cd01a85070 100644 --- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java @@ -440,13 +440,11 @@ public class UtilAll { return false; } - public static boolean isInternalV6IP(byte[] ip) { - if (ip.length != 16) { - throw new RuntimeException("illegal ipv6 bytes"); - } - - //FEC0:0000:0000:0000:0000:0000:0000:0000/10 - if (ip[0] == (byte) 254 && ip[1] >= (byte) 192) { + public static boolean isInternalV6IP(InetAddress inetAddr) { + if (inetAddr.isAnyLocalAddress() // Wild card ipv6 + || inetAddr.isLinkLocalAddress() // Single broadcast ipv6 address: fe80:xx:xx... + || inetAddr.isLoopbackAddress() //Loopback ipv6 address + || inetAddr.isSiteLocalAddress()) { // Site local ipv6 address: fec0:xx:xx... return true; } return false; @@ -457,9 +455,6 @@ public class UtilAll { throw new RuntimeException("illegal ipv4 bytes"); } -// if (ip[0] == (byte)30 && ip[1] == (byte)10 && ip[2] == (byte)163 && ip[3] == (byte)120) { -// } - if (ip[0] >= (byte) 1 && ip[0] <= (byte) 126) { if (ip[1] == (byte) 1 && ip[2] == (byte) 1 && ip[3] == (byte) 1) { return false; @@ -550,7 +545,7 @@ public class UtilAll { byte[] ipByte = ip.getAddress(); if (ipByte.length == 16) { if (ipV6Check(ipByte)) { - if (!isInternalV6IP(ipByte)) { + if (!isInternalV6IP(ip)) { return ipByte; } else if (internalIP == null) { internalIP = ipByte; diff --git a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java index 3991367330bedb522c46015b13b792e76a4fa278..b854099a5bd757a984d402e86d6da06b0119ae12 100644 --- a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java @@ -17,6 +17,8 @@ package org.apache.rocketmq.common; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.Properties; import org.junit.Test; @@ -99,12 +101,12 @@ public class UtilAllTest { } @Test - public void testIPv6Check() { - byte[] nonInternalIp = UtilAll.string2bytes("24084004018081003FAA1DDE2B3F898A"); - byte[] internalIp = UtilAll.string2bytes("FEC0000000000000000000000000FFFF"); - assertThat(UtilAll.isInternalV6IP(nonInternalIp)).isFalse(); - assertThat(UtilAll.isInternalV6IP(internalIp)).isTrue(); - assertThat(UtilAll.ipToIPv6Str(nonInternalIp).toUpperCase()).isEqualTo("2408:4004:0180:8100:3FAA:1DDE:2B3F:898A"); + public void testIPv6Check() throws UnknownHostException { + InetAddress nonInternal = InetAddress.getByName("2408:4004:0180:8100:3FAA:1DDE:2B3F:898A"); + InetAddress internal = InetAddress.getByName("FE80:0000:0000:0000:0000:0000:0000:FFFF"); + assertThat(UtilAll.isInternalV6IP(nonInternal)).isFalse(); + assertThat(UtilAll.isInternalV6IP(internal)).isTrue(); + assertThat(UtilAll.ipToIPv6Str(nonInternal.getAddress()).toUpperCase()).isEqualTo("2408:4004:0180:8100:3FAA:1DDE:2B3F:898A"); } static class DemoConfig { diff --git a/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java b/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java index 0df75eb30a01823ac7792fb7958a7b38135f6c4d..1ec6d93cffc2391a9e049b545f5b3f3956585cdb 100644 --- a/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/message/MessageClientIDSetterTest.java @@ -17,9 +17,8 @@ package org.apache.rocketmq.common.message; -import java.util.Calendar; -import java.util.Date; import org.junit.Test; + import static org.assertj.core.api.Assertions.assertThat; public class MessageClientIDSetterTest {