You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							62 lines
						
					
					
						
							1.3 KiB
						
					
					
				| package util | |
| 
 | |
| import ( | |
| 	"net" | |
| 	"strconv" | |
| 	"strings" | |
| 
 | |
| 	"github.com/seaweedfs/seaweedfs/weed/glog" | |
| ) | |
| 
 | |
| func DetectedHostAddress() string { | |
| 	netInterfaces, err := net.Interfaces() | |
| 	if err != nil { | |
| 		glog.V(0).Infof("failed to detect net interfaces: %v", err) | |
| 		return "" | |
| 	} | |
| 
 | |
| 	if v4Address := selectIpV4(netInterfaces, true); v4Address != "" { | |
| 		return v4Address | |
| 	} | |
| 
 | |
| 	if v6Address := selectIpV4(netInterfaces, false); v6Address != "" { | |
| 		return v6Address | |
| 	} | |
| 
 | |
| 	return "localhost" | |
| } | |
| 
 | |
| func selectIpV4(netInterfaces []net.Interface, isIpV4 bool) string { | |
| 	for _, netInterface := range netInterfaces { | |
| 		if (netInterface.Flags & net.FlagUp) == 0 { | |
| 			continue | |
| 		} | |
| 		addrs, err := netInterface.Addrs() | |
| 		if err != nil { | |
| 			glog.V(0).Infof("get interface addresses: %v", err) | |
| 		} | |
| 
 | |
| 		for _, a := range addrs { | |
| 			if ipNet, ok := a.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { | |
| 				if isIpV4 { | |
| 					if ipNet.IP.To4() != nil { | |
| 						return ipNet.IP.String() | |
| 					} | |
| 				} else { | |
| 					if ipNet.IP.To16() != nil { | |
| 						return ipNet.IP.String() | |
| 					} | |
| 				} | |
| 			} | |
| 		} | |
| 	} | |
| 	return "" | |
| } | |
| 
 | |
| func JoinHostPort(host string, port int) string { | |
| 	portStr := strconv.Itoa(port) | |
| 	if strings.HasPrefix(host, "[") && strings.HasSuffix(host, "]") { | |
| 		return host + ":" + portStr | |
| 	} | |
| 	return net.JoinHostPort(host, portStr) | |
| }
 |