diff options
| -rw-r--r-- | common.go | 4 | ||||
| -rw-r--r-- | domainname.go | 62 | ||||
| -rw-r--r-- | whois.go | 47 | 
3 files changed, 111 insertions, 2 deletions
@@ -11,7 +11,7 @@ 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) { +func SplitOld(s string) (string, string) {  	parts := strings.Fields(s)  	if len(parts) == 0 {  		return "", "" @@ -24,7 +24,7 @@ func Split(s string) (string, string) {  // checks to make sure there is a domainname  func ValidDomainname(s string) error { -	_, domainname := Split(s) +	_, domainname := SplitOld(s)  	if domainname == "" {  		return ErrorEmptyDomainName  	} diff --git a/domainname.go b/domainname.go new file mode 100644 index 0000000..ae49670 --- /dev/null +++ b/domainname.go @@ -0,0 +1,62 @@ +package hostname + +import ( +	"fmt" +	"strings" +) + +// for www.corp.wit.com retuns: +// "www", "corp.wit.com", nil +func GetDomainname() (string, string, error) { +	hname, err := osGetHostname() +	if err != nil { +		return hname, "", err +	} +	hname = strings.TrimSpace(hname) +	hname = strings.Trim(hname, ".") +	parts := strings.Split(hname, ".") +	if len(parts) == 0 { +		return "", "", fmt.Errorf("domainname not set") +	} + +	if len(parts) == 1 { +		return parts[0], "", fmt.Errorf("domainname not set") +	} + +	dname := strings.Join(parts[1:], ".") + +	return hname, dname, nil +} + +// splits hostname into first and last part +// for www.corp.wit.com retuns: +// "www", "corp.wit.com", nil +func Split(hname string) (string, string, error) { +	hname = strings.TrimSpace(hname) +	hname = strings.Trim(hname, ".") +	parts := strings.Split(hname, ".") +	if len(parts) == 0 { +		return "", "", fmt.Errorf("domainname not set") +	} + +	if len(parts) == 1 { +		return parts[0], "", fmt.Errorf("domainname not set") +	} + +	dname := strings.Join(parts[1:], ".") + +	return hname, dname, nil +} + +func Join(hname string, dname string) string { +	hname = strings.TrimSpace(hname) +	hname = strings.Trim(hname, ".") +	dname = strings.TrimSpace(dname) +	dname = strings.Trim(dname, ".") + +	fullname := strings.Join([]string{hname, dname}, ".") +	fullname = strings.TrimSpace(fullname) +	fullname = strings.Trim(fullname, ".") + +	return fullname +} diff --git a/whois.go b/whois.go new file mode 100644 index 0000000..5299057 --- /dev/null +++ b/whois.go @@ -0,0 +1,47 @@ +package hostname + +import ( +	"io" +	"net" +) + +// GetWhois performs a raw whois query for a given domain. +// Note: This does not recursively find the right server; it uses a known one. +func GetWhois(domain, server string) (string, error) { +	// Connect to the whois server on port 43 +	conn, err := net.Dial("tcp", net.JoinHostPort(server, "43")) +	if err != nil { +		return "", err +	} +	defer conn.Close() + +	// Send the domain query +	_, err = conn.Write([]byte(domain + "\r\n")) +	if err != nil { +		return "", err +	} + +	// Read the entire response +	result, err := io.ReadAll(conn) +	if err != nil { +		return "", err +	} + +	return string(result), nil +} + +/* +func main() { +// We have to know the server for .com domains +const whoisServer = "whois.verisign-grs.com" +  domain :="google.com" + +  whoisData, err := GetWhois(domain, whoisServer) +if err != nil { +          log.Fatal"Error getting whois info: %v", err) +  } + +  fmt.Println(whoisData) +} + +*/  | 
