func getHostName(domainName string) (string, error) { host := strings.ToLower(domainName) addr, err := net.LookupHost(host) if err != nil || len(addr) < 1 { host = "www." + domainName addr, err = net.LookupHost(host) if err != nil || len(addr) < 1 { return "", errors.New("failed to lookup IP of domain.") } } return host, nil }
func NewEndpoint(domainName string) (*Endpoint, error) { host := strings.ToLower(domainName) e := &Endpoint{Host: host} if strings.Contains(host, "://") { u, err := url.Parse(host) if err != nil { return nil, err } e.Host = strings.Split(u.Host, ":")[0] e.URL = u } if net.ParseIP(e.Host) != nil { // the parsed host is an IP address. e.IsIP = true return e, nil } addr, err := net.LookupHost(e.Host) if err != nil || len(addr) < 1 { e.Host = "www." + domainName addr, err = net.LookupHost(e.Host) if err != nil || len(addr) < 1 { return nil, fmt.Errorf("failed to lookup IP of domain %s.", e.Host) } } return e, nil }
func isHostInCN(req *http.Request) bool { if nil == ipfunc { return true } host := req.Host if strings.Contains(host, ":") { host, _, _ = net.SplitHostPort(host) } //consider use trusted DNS var ip string var ok bool if strings.HasSuffix(host, ".cn") { return true } else { if ips, err := net.LookupHost(host); nil == err && len(ips) > 0 { ip = ips[0] ok = true } } if !ok || nil == ipfunc { return false } country, err := ipfunc.FindCountry(ip) if nil != err { log.Printf("[WARN]Find country error:%v\n", err) return false } ret := strings.EqualFold(country, "CN") return ret }
// Resolve a hostname to an IP address using the system DNS settings first, then HypeDNS func resolveHost(hostname string) (ips []string, err error) { var ip string // Try the system DNS setup result, _ := net.LookupHost(hostname) if len(result) > 0 { goto end } // Try with hypedns ip, err = lookupHypeDNS(hostname) if ip == "" || err != nil { err = fmt.Errorf("Unable to resolve hostname. This is usually caused by not having a route to hypedns. Please try again in a few seconds.") return } result = append(result, ip) end: for _, addr := range result { tIP := net.ParseIP(addr) // Only grab the cjdns IP's if tIP[0] == 0xfc { ips = append(ips, padIPv6(net.ParseIP(addr))) } } return }
func validateApiEndpoint(config *config) error { if config.ApiEndpoint == nil { return fmt.Errorf("* 'api' must not be null") } if config.GetApiEndpoint() == "" { return fmt.Errorf("* Invalid configuration: 'api' must be a valid Cloud Controller endpoint but was blank") } u, err := url.Parse(config.GetApiEndpoint()) if err != nil { return fmt.Errorf("* Invalid configuration: 'api' must be a valid URL but was set to '%s'", config.GetApiEndpoint()) } host := u.Host if host == "" { // url.Parse misunderstood our convention and treated the hostname as a URL path host = u.Path } if _, err = net.LookupHost(host); err != nil { return fmt.Errorf("* Invalid configuration for 'api' <%s>: %s", config.GetApiEndpoint(), err) } return nil }
func TestCountrySpodhuis(t *testing.T) { ipList, err := net.LookupHost(checkSksHostname) if err != nil { t.Fatalf("LookupHost(%s) failed: %s", checkSksHostname, err) } if len(ipList) != checkSksIPCount { t.Fatalf("Wrong number of IP addresses for \"%s\": expected %d got %d", checkSksHostname, checkSksIPCount, len(ipList)) } var expectSucceed bool for _, ip := range ipList { switch { case net.ParseIP(ip).To4() != nil: expectSucceed = true default: expectSucceed = checkSksExpectIPv6HasCountry } country, err := CountryForIPString(ip) if err != nil { if expectSucceed { t.Fatalf("Failed to resolve country for [%s] (from \"%s\"): %s", ip, checkSksHostname, err) } continue } if !expectSucceed { t.Fatalf("Unexpectedly resolved country for [%s] (from \"%s\")", ip, checkSksHostname) } if country != checkSksCountry { t.Fatalf("Host \"%s\" IP [%s]: expected country \"%s\", got \"%s\"", checkSksHostname, ip, checkSksCountry, country) } } }
// getAddress gets the localhosts IPv4 address. func GetAddress() (string, error) { name, err := os.Hostname() if err != nil { log.Print("Error Resolving Hostname:", err) return "", err } if ipv4host == "NONE" { as, err := net.LookupHost(name) if err != nil { return "", err } addr := "" for _, a := range as { log.Printf("a = %+v", a) if ipv4Reg.MatchString(a) { log.Print("matches") addr = a } } if addr == "" { err = errors.New("No IPv4 Address for Hostname") } return addr, err } return ipv4host, nil }
func (r *ReplicaSet) proxyHostname() string { const home = "127.0.0.1" hostname, err := os.Hostname() if err != nil { r.Log.Error(err) return home } // The follow logic ensures that the hostname resolves to a local address. // If it doesn't we don't use it since it probably wont work anyways. hostnameAddrs, err := net.LookupHost(hostname) if err != nil { r.Log.Error(err) return home } interfaceAddrs, err := net.InterfaceAddrs() if err != nil { r.Log.Error(err) return home } for _, ia := range interfaceAddrs { sa := ia.String() for _, ha := range hostnameAddrs { // check for an exact match or a match ignoring the suffix bits if sa == ha || strings.HasPrefix(sa, ha+"/") { return hostname } } } r.Log.Warnf("hostname %s doesn't resolve to the current host", hostname) return home }
func requiresEtcHostsEdits(t *testing.T) { addrs, err := net.LookupHost(testDomain) if err != nil || len(addrs) != 1 || addrs[0] != "127.0.0.1" { t.Skip("/etc/hosts file not properly configured, skipping test. see README for required edits") } return }
func LookupIP(host string) (addrs []net.IP, err error) { ip := net.ParseIP(host) if ip == nil || ip.To4() == nil { ip, ipnet, err := net.ParseCIDR(host) if err != nil || ip.To4() == nil { hosts, err := net.LookupHost(host) if err != nil { return nil, err } addrs := make([]net.IP, 0, len(hosts)) for _, v := range hosts { ip = net.ParseIP(v) ip = ip.To4() if ip != nil { addrs = append(addrs, ip) } } return addrs, nil } addrs, _ := HostAddr(ipnet) return addrs, nil } return []net.IP{ip}, nil }
func checkNameResolve(inFilename string, debug bool) (err error) { rawBytes, err := ioutil.ReadFile(inFilename) if err != nil { return err } text := string(rawBytes) lines := strings.Split(text, "\n") for _, line := range lines { if line == "" { if debug == true { log.Println("End of file") } return nil } ip, err := net.LookupHost(line) if debug == true { log.Println("Try to resolve", line, "IP(s):", ip, "Error:", err) } else { if err != nil { fmt.Println(line) } } } return nil }
func (r *resolver) resolveAndUpdate(item cacheItem) (cacheItem, error) { ips, err := net.LookupHost(item.host) if err != nil { if r.logger != nil { r.logger.Warnf("resolveAndUpdate %v: %v", item.host, err) } r.cacheLock.Lock() delete(r.cache, item.host) r.cacheLock.Unlock() return cacheItem{err: err}, err } if item.ips == nil || !util.StrSliceEqual(item.ips, ips) { if r.logger != nil { r.logger.Debugf("resolveAndUpdate: %s ips changed %v -> %v", item.host, item.ips, ips) } item.ips = ips item.err = err r.cacheLock.Lock() r.cache[item.host] = item r.cacheLock.Unlock() } return item, nil }
func ExampleSocks4Client() { user := "" client, err := NewSocks4Client("tcp", "127.0.0.1:1080", user, Direct) if err != nil { return } addrs, err := net.LookupHost("www.google.com") if err != nil { return } if len(addrs) == 0 { return } conn, err := client.Dial("tcp", addrs[0]+":80") if err != nil { return } httpClient := httputil.NewClientConn(conn, nil) defer httpClient.Close() request, err := http.NewRequest("GET", "/", nil) if err != nil { return } resp, err := httpClient.Do(request) if err != nil { return } dump, err := httputil.DumpResponse(resp, true) if err != nil { return } println(string(dump)) return }
func Connect(socket *Socket, host string, portno int) (retval int, err error) { addrs, err := net.LookupHost(host) if err != nil { return -1, fmt.Errorf("Unable to connect to the socket: %s", err) } resolvedHost := addrs[0] if socket.af == syscall.AF_INET6 { resolvedHost = fmt.Sprintf("[%s]", resolvedHost) } rsa, salen, err := createSockaddr(resolvedHost, portno) if err != nil { return -1, fmt.Errorf("could not convert syscall.Sockaddr to syscall.RawSockaddrAny %s", err) } retval = int(C.udt_connect(socket.sock, (*C.struct_sockaddr)(unsafe.Pointer(rsa)), C.int(salen))) if retval != 0 { return retval, udtErrDesc("Unable to connect to the socket") } return }
func lookup() { for { req := <-requestChan req.addrs, req.err = net.LookupHost(req.host) req.done <- 1 } }
// Compares the request's origin with a list of defined origins and allows it if one of them matches func AllowKnownOrigin(w http.ResponseWriter, req *http.Request) { headerOrigin := req.Header.Get("Origin") if headerOrigin != "" { addr := strings.Split(req.RemoteAddr, ":")[0] for _, srcOrigin := range KnownOrigins { if srcOrigin == headerOrigin { logs.Debug("Match : %s - %s", srcOrigin, headerOrigin) w.Header().Set("Access-Control-Allow-Origin", headerOrigin) return } originAddr, err := net.LookupHost(srcOrigin) var origin string if err == nil { origin = originAddr[0] } else { origin = srcOrigin } if origin == addr { logs.Debug("Match : %s - %s", addr, origin) w.Header().Set("Access-Control-Allow-Origin", headerOrigin) return } } } w.Header().Set("Access-Control-Allow-Origin", "https://cloud.quorumapps.com") }
func testOnGCE() bool { ctx, cancel := context.WithCancel(context.Background()) defer cancel() resc := make(chan bool, 2) // Try two strategies in parallel. // See https://github.com/GoogleCloudPlatform/gcloud-golang/issues/194 go func() { res, err := ctxhttp.Get(ctx, metaClient, "http://"+metadataIP) if err != nil { resc <- false return } defer res.Body.Close() resc <- res.Header.Get("Metadata-Flavor") == "Google" }() go func() { addrs, err := net.LookupHost("metadata.google.internal") if err != nil || len(addrs) == 0 { resc <- false return } resc <- strsContains(addrs, metadataIP) }() return <-resc }
func BlackList(ip string, bl []string, v string) ([]string, error) { result := []string{} rIp, ipv := reverseIP(ip) if ipv != "ipv4" { return result, errors.New(ipv + " not supported") } if v != "n" { log.Println("Reverse:", rIp) } var wg sync.WaitGroup //ToDo add ipv6 blacklist support for _, b := range bl { wg.Add(1) go func(b string) { i, err := net.LookupHost(rIp + "." + b) if err == nil { result = append(result, b) } if v != "n" { log.Println("Checked: ", b, i) } defer wg.Done() }(b) } wg.Wait() return result, nil }
// Resolvable checks if the given host can be resolved on the TCP and UDP nets func Resolvable(host string) bool { _, err := net.LookupHost(host) if err == nil { return true } return false }
func detectWildcard(domain string) (bool, map[string]struct{}, error) { bytes := make([]byte, 12) _, err := rand.Read(bytes) if err != nil { return false, nil, err } domain = fmt.Sprintf("%s.%s", hex.EncodeToString(bytes), domain) answers, err := net.LookupHost(domain) if err != nil { if asserted, ok := err.(*net.DNSError); ok && asserted.Err == "no such host" { return false, nil, nil } return false, nil, err } responses := make(map[string]struct{}) for _, answer := range answers { responses[answer] = struct{}{} } return true, responses, nil }
func HostAddrIP4(hostaddr string) net.IP { // find out what ip4 host address to advertise localHost := hostaddr + ":0" if hostaddr == "" { // no public local host address given by command line hostname, err := os.Hostname() if err != nil { fmt.Println(TAG, "Oops:", err) os.Exit(1) } fmt.Println(TAG, "Hostname", hostname) addrs, err := net.LookupHost(hostname) if err != nil { fmt.Println(TAG, "Oops:", err) os.Exit(1) } for _, a := range addrs { fmt.Println(TAG, "range addrs", a) localHost = fmt.Sprintf("%s:0", a) } } fmt.Println(TAG, "localHost", localHost) // get the localHost address into an IP4 byte array localHostAddr, ert := net.ResolveTCPAddr("tcp", localHost) if ert != nil { fmt.Println("Resolve localHostAddr error", ert) os.Exit(1) } return localHostAddr.IP.To4() }
//(Ljava/lang/String;)[Ljava/net/InetAddress; func i6di_lookupAllHostAddr(frame *rtda.Frame) { vars := frame.LocalVars() host := rtda.GoString(vars.GetRef(1)) address, _ := net.LookupHost(host) constructorCount := uint(len(address)) inetAddress := heap.BootLoader().LoadClass("java/net/InetAddress") inetAddressArr := inetAddress.NewArray(constructorCount) stack := frame.OperandStack() stack.PushRef(inetAddressArr) //TODO //getByName descriptor:(Ljava/lang/String;)Ljava/net/InetAddress; //if constructorCount > 0 { // thread := frame.Thread() // constructorObjs := inetAddressArr.Refs() // inetAddressGetByNameMethod := inetAddress.GetStaticMethod("getByName", "(Ljava/lang/String;)Ljava/net/InetAddress;") // fmt.Println(constructorObjs[0]) // fmt.Println(inetAddressGetByNameMethod) // fmt.Println(thread) // thread.InvokeMethodWithShim(inetAddressGetByNameMethod, []interface{}{ // constructorObjs[0], // rtda.JString(host), // }) //} }
// multiscan scans all DNS addresses returned for the host, returning the lowest grade // and the concatenation of all the output. func multiscan(host string, scan scanFunc) (grade Grade, output Output, err error) { domain, port, _ := net.SplitHostPort(host) var addrs []string addrs, err = net.LookupHost(domain) if err != nil { return } grade = Good out := make(map[string]Output) for _, addr := range addrs { var g Grade var o Output g, o, err = scan(net.JoinHostPort(addr, port)) if err != nil { grade = Bad return } if g < grade { grade = g } out[addr] = o } output = out return }
func main() { flag.Parse() file, err := os.Open(*wordlist) if err != nil { fmt.Println(err) os.Exit(1) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { prefix := scanner.Text() host := fmt.Sprintf(prefix + "." + *hostname) // If the domain name is created is valid and if // it exists print out the domain and the respective IPs if isDomainName(host) { addrs, err := net.LookupHost(host) if err != nil { //fmt.Println(err) continue } fmt.Println("\n" + host) for _, a := range addrs { if isPrivate(a) { // Mark the private IPs fmt.Print("[+] ") } fmt.Println(a) } } } }
func (rbl *RBL) LookupRBL(ip net.IP) (RBLResult, error) { res := RBLResult{ Listed: false, Ip: ip, Zone: rbl.Zone, Text: "", } query, err := rbl.query(ip) if err != nil { return res, err } addrs, err := net.LookupHost(query) reg, _ := regexp.Compile("(?i:no such host)") if err != nil && reg.FindStringIndex(err.Error()) == nil { return res, err } if len(addrs) > 0 { res.Listed = true text, err := net.LookupTXT(query) if err == nil { res.Text = strings.Join(text, "\n") } } return res, nil }
func main() { flag.Parse() c := make(chan int) defer close(c) if len(os.Args) < 2 { usage() return } args := flag.Args() max := len(args) finised := 0 for i := 0; i < len(args); i++ { go func(i int) { defer func() { c <- 1 }() for l := 0; l < loop; l++ { ips, err := net.LookupHost(args[i]) if err != nil { fmt.Fprintln(os.Stderr, "resolv error:", err.Error()) return } fmt.Println("resloved success, ips:", strings.Join(ips, ",")) if sleep > 0 { time.Sleep(1 * time.Second) } } }(i) } for finised < max { select { case <-c: finised++ } } }
// SimpleHTTPS checks for DNS, public IP and port bindings func (s *simpleHTTPChallenge) CanSolve(domain string) bool { // determine public ip resp, err := http.Get("https://icanhazip.com/") if err != nil { logger().Printf("Could not get public IP -> %v", err) return false } defer resp.Body.Close() ip, err := ioutil.ReadAll(resp.Body) if err != nil { logger().Printf("Could not get public IP -> %v", err) return false } ipStr := string(ip) ipStr = strings.Replace(ipStr, "\n", "", -1) // resolve domain we should solve for resolvedIPs, err := net.LookupHost(domain) if err != nil { logger().Printf("Could not lookup DNS A record for %s", domain) return false } // if the resolve does not resolve to our public ip, we can't solve. for _, resolvedIP := range resolvedIPs { if resolvedIP == ipStr { return true } } logger().Printf("SimpleHTTP: Domain %s does not resolve to the public ip of this server. Determined IP: %s Resolved IP: %s", domain, ipStr, resolvedIPs[0]) return false }
// Contains returns true if container includes the given host and false // otherwise. The specified host can be a DNS name or an IP. func (i *IPNetContainer) Contains(host string) bool { originalHost := host if result, exists := i.cache[host]; exists { return result } addToCache := func(result bool) bool { i.cache[originalHost] = result return result } ips, err := net.LookupHost(host) if err == nil { host = ips[0] } parsedIP := net.ParseIP(host) if parsedIP == nil { return addToCache(false) } for _, network := range i.networks { if network.Contains(parsedIP) { return addToCache(true) } } return addToCache(false) }
// OtherSystemInfo retrieves information from the system like hostname, IPv4 address, pagesize, // target architecture and target operating system. func OtherSystemInfo() map[string]string { otherInfoMap := make(map[string]string) // Hostname hostname, err := os.Hostname() if err != nil { otherInfoMap["hostname"] = "Error: The hostname for the current system could not be retrieved." } else { otherInfoMap["hostname"] = hostname } // IP address addresses, err := net.LookupHost(hostname) if err != nil { otherInfoMap["ipv4_address"] = "Error: The IPv4 address for the current system could not be retrieved." } else { for _, address := range addresses { ipv4_address := net.ParseIP(address).To4() if ipv4_address != nil { otherInfoMap["ipv4_address"] = address } } } otherInfoMap["os_pagesize"] = strconv.Itoa(os.Getpagesize()) otherInfoMap["target_architecture"] = runtime.GOARCH otherInfoMap["target_os"] = runtime.GOOS return otherInfoMap }
func getPulicIp(hostname string) string { if len(hostname) == 0 { return "" } var ipAddr string = "" addrs, err := net.LookupHost(hostname) if err != nil { log.Println(fmt.Sprintf("ERR: Failed to resolve ip address %s", err)) } else { for _, ip := range addrs { // Skip ipv6 / local ipaddresses if isIpv4Ip(ip) == false && ipv6 == false { continue } // Skip local if isLocalIp(ip) == true && noBindLocalhost == true { continue } if debug { log.Println(fmt.Sprintf("DEBUG: Host %s resolves to %s", hostname, ip)) } ipAddr = ip } } return ipAddr }