You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by do...@apache.org on 2025/05/16 02:46:27 UTC

(inlong) branch master updated: [INLONG-11865][SDK] Optimize the acquisition of local valid IP addresses (#11866)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new cf0b8323db [INLONG-11865][SDK] Optimize the acquisition of local valid IP addresses (#11866)
cf0b8323db is described below

commit cf0b8323dbd3f9b82a7e5ea3a7e1cca7c7ccf820
Author: lvanneo <38...@users.noreply.github.com>
AuthorDate: Fri May 16 10:46:22 2025 +0800

    [INLONG-11865][SDK] Optimize the acquisition of local valid IP addresses (#11866)
---
 .../dataproxy-sdk-golang/util/ip.go                | 57 ++++++++++++++++------
 1 file changed, 43 insertions(+), 14 deletions(-)

diff --git a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/ip.go b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/ip.go
index ecc6d7d14c..2ca85d429f 100755
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/ip.go
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/util/ip.go
@@ -74,21 +74,54 @@ func IsPrivateIP(ip string) bool {
 	return false
 }
 
+// GetIPv4List obtain all valid local addresses
+func GetIPv4List() ([]string, error) {
+	interfaces, err := net.Interfaces()
+	if err != nil {
+		return nil, err
+	}
+
+	var ipv4List []string
+	for _, iface := range interfaces {
+		if iface.Flags&net.FlagUp == 0 {
+			continue
+		}
+
+		addrs, err := iface.Addrs()
+		if err != nil {
+			continue
+		}
+
+		for _, addr := range addrs {
+			ipNet, ok := addr.(*net.IPNet)
+			if !ok {
+				continue
+			}
+
+			ip := ipNet.IP
+			if ip.IsLoopback() || ip.IsLinkLocalUnicast() {
+				continue
+			}
+
+			if ipv4 := ip.To4(); ipv4 != nil {
+				ipv4List = append(ipv4List, ipv4.String())
+			}
+		}
+	}
+	return ipv4List, nil
+}
+
 // GetPrivateIPList gets all the private IPs of the current host
 func GetPrivateIPList() ([]string, error) {
-	ips, err := net.InterfaceAddrs()
+	ips, err := GetIPv4List()
 	if err != nil {
 		return nil, err
 	}
 
 	var privateIPs []string
 	for _, ip := range ips {
-		parts := strings.Split(ip.String(), "/")
-		if len(parts) != 2 {
-			return nil, fmt.Errorf("ip %v address format error", ip.String())
-		}
-		if IsPrivateIP(parts[0]) {
-			privateIPs = append(privateIPs, parts[0])
+		if IsPrivateIP(ip) {
+			privateIPs = append(privateIPs, ip)
 		}
 	}
 
@@ -110,17 +143,13 @@ func GetFirstPrivateIP() (string, error) {
 
 // GetFirstIP gets the first IP of the current host
 func GetFirstIP() (string, error) {
-	ips, err := net.InterfaceAddrs()
+	ips, err := GetIPv4List()
 	if err != nil {
 		return "", err
 	}
 
-	for _, ip := range ips {
-		parts := strings.Split(ip.String(), "/")
-		if len(parts) != 2 {
-			continue
-		}
-		return parts[0], nil
+	if len(ips) > 0 {
+		return ips[0], nil
 	}
 
 	return "", fmt.Errorf("no ip")