diff --git a/clients/naming_client/naming_client.go b/clients/naming_client/naming_client.go index 1feb4c4f..fd2a74ff 100644 --- a/clients/naming_client/naming_client.go +++ b/clients/naming_client/naming_client.go @@ -109,6 +109,12 @@ func (sc *NamingClient) RegisterInstance(param vo.RegisterInstanceParam) (bool, if len(param.GroupName) == 0 { param.GroupName = constant.DEFAULT_GROUP } + if err := util.ValidateIPAddress(param.Ip); err != nil { + return false, err + } + if param.Port <= 0 || param.Port > math.MaxUint16 { + return false, errors.New("port is invalid") + } if param.Metadata == nil { param.Metadata = make(map[string]string) } diff --git a/util/common.go b/util/common.go index 2097dd1e..104ce713 100644 --- a/util/common.go +++ b/util/common.go @@ -18,15 +18,16 @@ package util import ( "encoding/json" + "fmt" + "github.com/nacos-group/nacos-sdk-go/v2/common/constant" + "github.com/nacos-group/nacos-sdk-go/v2/common/logger" + "github.com/nacos-group/nacos-sdk-go/v2/model" "net" "net/http" "net/url" "strconv" + "strings" "time" - - "github.com/nacos-group/nacos-sdk-go/v2/common/constant" - "github.com/nacos-group/nacos-sdk-go/v2/common/logger" - "github.com/nacos-group/nacos-sdk-go/v2/model" ) func CurrentMillis() int64 { @@ -148,3 +149,18 @@ func Contains(slice []string, item string) bool { } return false } + +// ValidateIPAddress validates if the input is a valid IPv4 or IPv6 address +// Returns nil if valid, otherwise returns an error message +func ValidateIPAddress(input string) error { + input = strings.TrimSpace(input) + if input == "" { + return fmt.Errorf("input is empty") + } + + if ip := net.ParseIP(input); ip != nil { + return nil // Valid IP address + } + + return fmt.Errorf("not a valid IPv4 or IPv6 address") +}