This is an automated email from the ASF dual-hosted git repository.

HTHou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new ed8cb435b94 Fix IPv6 endpoint handling in client and ops tools (#18291)
ed8cb435b94 is described below

commit ed8cb435b9484a62dfbfdd56fd392645aa27f759
Author: Haonan <[email protected]>
AuthorDate: Thu Jul 23 19:56:19 2026 +0800

    Fix IPv6 endpoint handling in client and ops tools (#18291)
    
    * Fix CLI IPv6 endpoint formatting
    
    * Fix IPv6 handling in client and ops tools
    
    * Exclude subscription examples from IPv6 tool fix
    
    * Fix Windows backup port detection guards
    
    * Preserve endpoint port validation behavior
---
 .../en/org/apache/iotdb/cli/i18n/CliMessages.java  |  3 ++
 .../zh/org/apache/iotdb/cli/i18n/CliMessages.java  |  3 ++
 .../src/main/java/org/apache/iotdb/cli/Cli.java    | 19 +++++++---
 .../apache/iotdb/tool/data/ExportDataTable.java    |  3 +-
 .../apache/iotdb/tool/data/ImportDataTable.java    |  3 +-
 .../iotdb/tool/schema/ExportSchemaTable.java       |  3 +-
 .../iotdb/tool/schema/ImportSchemaTable.java       |  3 +-
 .../main/java/org/apache/iotdb/rpc/UrlUtils.java   |  8 +++++
 .../java/org/apache/iotdb/rpc/UrlUtilsTest.java    |  3 ++
 scripts/tools/ops/health_check.sh                  |  8 +++--
 scripts/tools/windows/ops/backup.bat               | 16 ++++++---
 scripts/tools/windows/ops/health_check.bat         | 41 ++++++++++++++--------
 12 files changed, 84 insertions(+), 29 deletions(-)

diff --git 
a/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java 
b/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java
index 9a877ca9d3c..5c13eb55752 100644
--- 
a/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java
+++ 
b/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java
@@ -24,6 +24,9 @@ public final class CliMessages {
   // CliContext
   public static final String EXITING_WITH_CODE = "Exiting with code %d";
 
+  // Cli
+  public static final String SUCCESSFULLY_LOGIN_AT = "Successfully login at 
%s";
+
   // IoTDBDataBackTool
   public static final String TARGET_DIR_EMPTY =
       " -targetdir cannot be empty, The backup folder must be specified";
diff --git 
a/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java 
b/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java
index 68e5c47e999..0e0f8f45634 100644
--- 
a/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java
+++ 
b/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java
@@ -24,6 +24,9 @@ public final class CliMessages {
   // CliContext
   public static final String EXITING_WITH_CODE = "正在退出,退出码 %d";
 
+  // Cli
+  public static final String SUCCESSFULLY_LOGIN_AT = "成功登录到 %s";
+
   // IoTDBDataBackTool
   public static final String TARGET_DIR_EMPTY =
       " -targetdir 不能为空,必须指定备份目录";
diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java
index 63c3c5d1153..a2ab742c881 100644
--- a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java
+++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.cli;
 
+import org.apache.iotdb.cli.i18n.CliMessages;
 import org.apache.iotdb.cli.type.ExitType;
 import org.apache.iotdb.cli.utils.CliContext;
 import org.apache.iotdb.cli.utils.JlineUtils;
@@ -26,6 +27,7 @@ import org.apache.iotdb.exception.ArgsErrorException;
 import org.apache.iotdb.jdbc.Config;
 import org.apache.iotdb.jdbc.IoTDBConnection;
 import org.apache.iotdb.rpc.RpcUtils;
+import org.apache.iotdb.rpc.UrlUtils;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
@@ -204,8 +206,7 @@ public class Cli extends AbstractCli {
 
   private static void executeSql(CliContext ctx) throws TException {
     try (IoTDBConnection connection =
-        (IoTDBConnection)
-            DriverManager.getConnection(Config.IOTDB_URL_PREFIX + host + ":" + 
port + "/", info)) {
+        (IoTDBConnection) DriverManager.getConnection(buildJdbcUrl(host, 
port), info)) {
       connection.setQueryTimeout(queryTimeout);
       properties = connection.getServerProperties();
       timestampPrecision = properties.getTimestampPrecision();
@@ -220,15 +221,15 @@ public class Cli extends AbstractCli {
 
   private static void receiveCommands(CliContext ctx) throws TException {
     try (IoTDBConnection connection =
-        (IoTDBConnection)
-            DriverManager.getConnection(Config.IOTDB_URL_PREFIX + host + ":" + 
port + "/", info)) {
+        (IoTDBConnection) DriverManager.getConnection(buildJdbcUrl(host, 
port), info)) {
       connection.setQueryTimeout(queryTimeout);
       properties = connection.getServerProperties();
       timestampPrecision = properties.getTimestampPrecision();
 
       echoStarting(ctx);
       displayLogo(ctx, properties.getLogo(), properties.getVersion(), 
properties.getBuildInfo());
-      ctx.getPrinter().println(String.format("Successfully login at %s:%s", 
host, port));
+      ctx.getPrinter()
+          .println(String.format(CliMessages.SUCCESSFULLY_LOGIN_AT, 
formatEndpoint(host, port)));
       while (true) {
         boolean readLine = readerReadLine(ctx, connection);
         if (readLine) {
@@ -241,6 +242,14 @@ public class Cli extends AbstractCli {
     }
   }
 
+  private static String formatEndpoint(String host, String port) {
+    return UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port);
+  }
+
+  private static String buildJdbcUrl(String host, String port) {
+    return Config.IOTDB_URL_PREFIX + formatEndpoint(host, port) + "/";
+  }
+
   private static boolean readerReadLine(CliContext ctx, IoTDBConnection 
connection) {
     String s;
     try {
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java
 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java
index 458c447ba4f..1694e86c9f0 100644
--- 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java
+++ 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.isession.ITableSession;
 import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.UrlUtils;
 import org.apache.iotdb.session.TableSessionBuilder;
 import org.apache.iotdb.tool.common.Constants;
 
@@ -65,7 +66,7 @@ public class ExportDataTable extends AbstractExportData {
   public void init() throws IoTDBConnectionException, 
StatementExecutionException {
     TableSessionBuilder tableSessionBuilder =
         new TableSessionBuilder()
-            .nodeUrls(Collections.singletonList(host + ":" + port))
+            
.nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host,
 port)))
             .username(username)
             .password(password)
             .database(database)
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java
 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java
index d103c63555b..d7dc94c4d2a 100644
--- 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java
+++ 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.isession.pool.ITableSessionPool;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.UrlUtils;
 import org.apache.iotdb.session.pool.TableSessionPoolBuilder;
 import org.apache.iotdb.tool.common.Constants;
 import org.apache.iotdb.tool.tsfile.ImportTsFileScanTool;
@@ -79,7 +80,7 @@ public class ImportDataTable extends AbstractImportData {
   public void init() throws InterruptedException {
     TableSessionPoolBuilder tableSessionPoolBuilder =
         new TableSessionPoolBuilder()
-            .nodeUrls(Collections.singletonList(host + ":" + port))
+            
.nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host,
 port)))
             .user(username)
             .password(password)
             .maxSize(threadNum + 1)
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
index c9b15870d21..6d5c6a8fca8 100644
--- 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
+++ 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.isession.pool.ITableSessionPool;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.UrlUtils;
 import org.apache.iotdb.session.pool.TableSessionPoolBuilder;
 import org.apache.iotdb.tool.common.Constants;
 
@@ -55,7 +56,7 @@ public class ExportSchemaTable extends AbstractExportSchema {
   public void init() throws InterruptedException {
     TableSessionPoolBuilder tableSessionPoolBuilder =
         new TableSessionPoolBuilder()
-            .nodeUrls(Collections.singletonList(host + ":" + port))
+            
.nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host,
 port)))
             .user(username)
             .password(password)
             .maxSize(threadNum + 1)
diff --git 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java
 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java
index 004ec8b4152..e42fd8135de 100644
--- 
a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java
+++ 
b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.isession.SessionDataSet;
 import org.apache.iotdb.isession.pool.ITableSessionPool;
 import org.apache.iotdb.rpc.IoTDBConnectionException;
 import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.rpc.UrlUtils;
 import org.apache.iotdb.session.pool.TableSessionPoolBuilder;
 import org.apache.iotdb.tool.common.Constants;
 import org.apache.iotdb.tool.data.ImportDataScanTool;
@@ -51,7 +52,7 @@ public class ImportSchemaTable extends AbstractImportSchema {
   public void init() throws InterruptedException {
     TableSessionPoolBuilder tableSessionPoolBuilder =
         new TableSessionPoolBuilder()
-            .nodeUrls(Collections.singletonList(host + ":" + port))
+            
.nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host,
 port)))
             .user(username)
             .password(password)
             .maxSize(threadNum + 1)
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java
index 2a02a365d2a..838de7c5350 100644
--- a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java
+++ b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java
@@ -76,6 +76,14 @@ public class UrlUtils {
 
   /** Format host and port as host:port or [ipv6]:port. This method expects 
host without a port. */
   public static String formatTEndPointIpv4AndIpv6Url(String host, int port) {
+    return formatTEndPointIpv4AndIpv6Url(host, String.valueOf(port));
+  }
+
+  /**
+   * Format host and port as host:port or [ipv6]:port. This method expects 
host without a port and
+   * leaves port validation to the endpoint consumer.
+   */
+  public static String formatTEndPointIpv4AndIpv6Url(String host, String port) 
{
     String formattedHost = host;
     if (isIpv6Literal(host) && !isBracketedIpv6Literal(host)) {
       formattedHost = IPV6_BEGIN_MARK + host + IPV6_END_MARK;
diff --git 
a/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java 
b/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java
index fb1b5b1359b..02dbd9ef68d 100644
--- 
a/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java
+++ 
b/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java
@@ -101,6 +101,7 @@ public class UrlUtilsTest {
   @Test
   public void testConvertHostNameURL() {
     assertEquals("localhost:22227", 
UrlUtils.formatTEndPointIpv4AndIpv6Url("localhost", 22227));
+    assertEquals("localhost:22227", 
UrlUtils.formatTEndPointIpv4AndIpv6Url("localhost", "22227"));
   }
 
   @Test
@@ -122,6 +123,8 @@ public class UrlUtilsTest {
   public void testConvertBracketedIPV6URL() {
     assertEquals(
         "[D80::ABAA:0]:22227", 
UrlUtils.formatTEndPointIpv4AndIpv6Url("[D80::ABAA:0]", 22227));
+    assertEquals(
+        "[D80::ABAA:0]:invalid", 
UrlUtils.formatTEndPointIpv4AndIpv6Url("D80::ABAA:0", "invalid"));
   }
 
   @Test
diff --git a/scripts/tools/ops/health_check.sh 
b/scripts/tools/ops/health_check.sh
index b538305f32c..1a12ab27a7e 100644
--- a/scripts/tools/ops/health_check.sh
+++ b/scripts/tools/ops/health_check.sh
@@ -146,10 +146,14 @@ remote_ports_check() {
       if [ -n "$unreachable_ports" ]; then
         unreachable_combinations+=("IP: $host, Ports: $unreachable_ports")
       fi
+      display_host="$host"
+      if [[ "$display_host" == *:* ]] && [[ "${display_host:0:1}" != "[" ]]; 
then
+        display_host="[$display_host]"
+      fi
       if [ -n "$ip_port_list" ]; then
-        ip_port_list="$ip_port_list,$host:$all_ports"
+        ip_port_list="$ip_port_list,$display_host:$all_ports"
       else
-        ip_port_list="$host:$all_ports"
+        ip_port_list="$display_host:$all_ports"
       fi
   done
   echo ""
diff --git a/scripts/tools/windows/ops/backup.bat 
b/scripts/tools/windows/ops/backup.bat
index f06c674895f..dc41df160da 100644
--- a/scripts/tools/windows/ops/backup.bat
+++ b/scripts/tools/windows/ops/backup.bat
@@ -71,24 +71,32 @@ set "operation_dirs="
 set dn_rpc_port_occupied=0
 set cn_internal_port_occupied=0
 
-for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do (
+for /f "tokens=1,2,5" %%i in ('netstat /ano') do (
+    set "local_endpoint=%%j"
+    if "!local_endpoint:~0,1!"=="[" (
+      set "local_port=!local_endpoint:*]:=!"
+    ) else (
+      set "local_port=!local_endpoint:*:=!"
+    )
     if %%i==TCP (
-       if %%j==%dn_rpc_port% (
+       if !local_port!==%dn_rpc_port% (
          if !dn_rpc_port_occupied!==0 (
            set spid=%%k
            call :checkIfIOTDBProcess !spid! is_iotdb
            if !is_iotdb!==1 (
              set local_iotdb_occupied_ports=%dn_rpc_port% 
!local_iotdb_occupied_ports!
            )
+           set dn_rpc_port_occupied=1
          )
 
-       ) else if %%j==%cn_internal_port% (
+       ) else if !local_port!==%cn_internal_port% (
          if !cn_internal_port_occupied!==0 (
              set spid=%%k
              call :checkIfIOTDBProcess !spid! is_iotdb
              if !is_iotdb!==1 (
               set local_iotdb_occupied_ports=%cn_internal_port% 
!local_iotdb_occupied_ports!
              )
+             set cn_internal_port_occupied=1
          )
        )
     )
@@ -135,4 +143,4 @@ exit /b
 
 :checkFail
 echo Please stop IoTDB
-exit /b
\ No newline at end of file
+exit /b
diff --git a/scripts/tools/windows/ops/health_check.bat 
b/scripts/tools/windows/ops/health_check.bat
index f8e87709efc..7fc57f2bd5a 100644
--- a/scripts/tools/windows/ops/health_check.bat
+++ b/scripts/tools/windows/ops/health_check.bat
@@ -50,7 +50,7 @@ for %%a in (%*) do (
             )
             :: Append IP and port to the ips string
             if !isPort! equ 1 (
-                set "ips=!ips!,!ip!:%%a"
+                set "ips=!ips!,!ip!;%%a"
             )
         )
     )
@@ -72,7 +72,7 @@ for %%a in (%*) do (
            )
             :: Append IP and port to the ips string
             if !isPort! equ 1 (
-              set "ips=!ips!,!ip!:%%a"
+              set "ips=!ips!,!ip!;%%a"
             )
         )
     )
@@ -430,9 +430,15 @@ set dn_data_region_consensus_port_occupied=0
 set cn_internal_port_occupied=0
 set cn_consensus_port_occupied=0
 set local_ports=%dn_rpc_port% %dn_internal_port% %dn_mpp_data_exchange_port% 
%dn_schema_region_consensus_port% %dn_data_region_consensus_port% 
%cn_consensus_port% %cn_internal_port%
-for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do (
+for /f "tokens=1,2,5" %%i in ('netstat /ano') do (
+    set "local_endpoint=%%j"
+    if "!local_endpoint:~0,1!"=="[" (
+      set "local_port=!local_endpoint:*]:=!"
+    ) else (
+      set "local_port=!local_endpoint:*:=!"
+    )
     if %%i==TCP (
-       if %%j==%dn_rpc_port% (
+       if !local_port!==%dn_rpc_port% (
          if !dn_rpc_port_occupied!==0 (
            set spid=%%k
            call :checkIfIOTDBProcess !spid! is_iotdb
@@ -443,7 +449,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
            )
            set dn_rpc_port_occupied=1
          )
-       ) else if %%j==%dn_internal_port% (
+       ) else if !local_port!==%dn_internal_port% (
          if !dn_internal_port_occupied!==0 (
              set spid=%%k
              call :checkIfIOTDBProcess !spid! is_iotdb
@@ -454,7 +460,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
              )
              set dn_internal_port_occupied=1
         )
-       ) else if %%j==%dn_mpp_data_exchange_port% (
+       ) else if !local_port!==%dn_mpp_data_exchange_port% (
          if !dn_mpp_data_exchange_port_occupied!==0 (
             set spid=%%k
             call :checkIfIOTDBProcess !spid! is_iotdb
@@ -465,7 +471,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
             )
            set dn_mpp_data_exchange_port_occupied=1
          )
-       ) else if %%j==%dn_schema_region_consensus_port% (
+       ) else if !local_port!==%dn_schema_region_consensus_port% (
          if !dn_schema_region_consensus_port_occupied!==0 (
             set spid=%%k
             call :checkIfIOTDBProcess !spid! is_iotdb
@@ -476,7 +482,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
             )
            set dn_schema_region_consensus_port_occupied=1
          )
-       ) else if %%j==%dn_data_region_consensus_port% (
+       ) else if !local_port!==%dn_data_region_consensus_port% (
          if !dn_data_region_consensus_port_occupied!==0 (
            set spid=%%k
            call :checkIfIOTDBProcess !spid! is_iotdb
@@ -488,7 +494,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
            )
            set dn_data_region_consensus_port_occupied=1
          )
-       ) else if %%j==%cn_internal_port% (
+       ) else if !local_port!==%cn_internal_port% (
          if !cn_internal_port_occupied!==0 (
              set spid=%%k
              call :checkIfIOTDBProcess !spid! is_iotdb
@@ -499,7 +505,7 @@ for /f  "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do 
(
              )
              set cn_internal_port_occupied=1
          )
-       ) else if %%j==%cn_consensus_port% (
+       ) else if !local_port!==%cn_consensus_port% (
          if !cn_consensus_port_occupied!==0 (
            set spid=%%k
            call :checkIfIOTDBProcess !spid! is_iotdb
@@ -556,9 +562,16 @@ exit /b
 :remote_ports_check
 for %%e in ("%endpoints:,=" "%") do (
     set counter=0
-    for /f "tokens=1,2 delims=:" %%i in ("%%~e") do (
+    for /f "tokens=1,2 delims=;" %%i in ("%%~e") do (
         set "ip=%%i"
         set "port=%%j"
+        if "!ip:~0,1!"=="[" if "!ip:~-1!"=="]" set "ip=!ip:~1,-1!"
+        set "display_ip=!ip!"
+        if not "!display_ip::=!"=="!display_ip!" (
+          if not "!display_ip:~0,1!"=="[" (
+            set "display_ip=[!display_ip!]"
+          )
+        )
         if "!allpreip!" == "!ip!" (
           set "iplist=!iplist! !port!"
         ) else (
@@ -566,12 +579,12 @@ for %%e in ("%endpoints:,=" "%") do (
           if !counter! EQU 0 (
            set /a counter+=1
            if defined iplist (
-           set "iplist=!iplist!,!ip!:!port!"
+           set "iplist=!iplist!,!display_ip!:!port!"
            ) else (
-           set "iplist=!ip!:!port!"
+           set "iplist=!display_ip!:!port!"
            )
           ) else (
-           set "iplist=!iplist!,!ip!:!port!"
+           set "iplist=!iplist!,!display_ip!:!port!"
           )
         )
 

Reply via email to