github.com/hairyhenderson/templater@v3.5.0+incompatible/net/net.go (about)

     1  // Package net contains functions to help with network-oriented lookups
     2  package net
     3  
     4  import (
     5  	"net"
     6  )
     7  
     8  // LookupIP -
     9  func LookupIP(name string) (string, error) {
    10  	i, err := LookupIPs(name)
    11  	if err != nil {
    12  		return "", err
    13  	}
    14  	if len(i) == 0 {
    15  		return "", nil
    16  	}
    17  	return i[0], nil
    18  }
    19  
    20  // LookupIPs -
    21  func LookupIPs(name string) ([]string, error) {
    22  	srcIPs, err := net.LookupIP(name)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  	var ips []string
    27  	for _, v := range srcIPs {
    28  		if v.To4() != nil && !contains(ips, v.String()) {
    29  			ips = append(ips, v.String())
    30  		}
    31  	}
    32  	return ips, nil
    33  }
    34  
    35  func contains(a []string, s string) bool {
    36  	for _, v := range a {
    37  		if v == s {
    38  			return true
    39  		}
    40  	}
    41  	return false
    42  }
    43  
    44  // LookupCNAME -
    45  func LookupCNAME(name string) (string, error) {
    46  	return net.LookupCNAME(name)
    47  }
    48  
    49  // LookupTXT -
    50  func LookupTXT(name string) ([]string, error) {
    51  	return net.LookupTXT(name)
    52  }
    53  
    54  // LookupSRV -
    55  func LookupSRV(name string) (*net.SRV, error) {
    56  	srvs, err := LookupSRVs(name)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  	return srvs[0], nil
    61  }
    62  
    63  // LookupSRVs -
    64  func LookupSRVs(name string) ([]*net.SRV, error) {
    65  	_, addrs, err := net.LookupSRV("", "", name)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  	return addrs, nil
    70  }