package hostname import ( "errors" "fmt" "net" "strings" ) var ErrorEmptyDomainName error = errors.New("domain name is empty") var ErrorDomainNameMisconfigured error = errors.New("your OS domain name is not configured correctly") // returns 'hostname', 'domainname' func Split(s string) (string, string) { parts := strings.Fields(s) if len(parts) == 0 { return "", "" } if len(parts) == 1 { return parts[0], "" } return parts[0], strings.Join(parts[1:], ".") } // checks to make sure there is a domainname func ValidDomainname(s string) error { _, domainname := Split(s) if domainname == "" { return ErrorEmptyDomainName } return nil } func ReverseLookupFQDN(hostname string) (string, error) { addrs, err := net.LookupIP(hostname) if err != nil || len(addrs) == 0 { return hostname, fmt.Errorf("failed to lookup IP for hostname %s: %w", hostname, err) } // Try reverse lookup on the first IP address names, err := net.LookupAddr(addrs[0].String()) if err != nil || len(names) == 0 { return hostname, fmt.Errorf("reverse DNS lookup failed for IP %s: %w", addrs[0].String(), err) } return names[0], nil }