Go: DNS query

Go: DNS query

In this article, we will explore how to make a DNS query using Go, step by step.

Domain Name System (DNS) queries are a fundamental aspect of the Internet infrastructure, allowing computers to translate domain names, such as www.example.com, into machine-understandable IP addresses. Performing a DNS query with the Go programming language is a relatively simple process thanks to the net standard library. In this article, we will explore how to make a DNS query using Go, step by step.

Prerequisites

Before you begin, make sure you have Go installed on your system. You can download Go from the official site ( https://golang.org/dl/) and follow the installation instructions appropriate for your operating system.

Import the net library

Go's standard net library provides everything you need to perform DNS queries. Start your Go program by importing this library:


     import (
         "fmt"
         "net"
     )

Perform a DNS query

To perform a DNS query, you will need to specify the domain name you wish to translate into an IP address. You can do this using the net.LookupHost() function.

Here is an example of how to do a DNS query for the domain " www.example.com" and print the 'resulting IP address:


     func main() {
         domain := "www.example.com"
        
         addresses, err := net.LookupHost(domain)
         if err != nil {
             fmt.Println("Error querying DNS:", err)
             return
         }
        
         fmt.Println("IP addresses for", domain)
         for _, address := range addresses {
             fmt.Println(address)
         }
     }

In this example, we are looking for IP addresses associated with the domain " www.example.com". The net.LookupHost() function will return a string slice containing the found IP addresses. If there is an error, an error will be returned which you will need to handle.

Complete example

Here is a complete example of a Go program that makes a DNS query:


     package main

     import (
         "fmt"
         "net"
     )
    
     func main() {
         domain := "www.example.com"
        
         addresses, err := net.LookupHost(domain)
         if err != nil {
             fmt.Println("Error querying DNS:", err)
             return
         }
        
         fmt.Println("IP addresses for", domain)
         for _, address := range addresses {
             fmt.Println(address)
         }
     }

Program execution

Save the program in a file with a ".go" extension, for example "dns_query.go". Then, you can run it using the go run terminal command:

$ go run dns_query.go

The program will query DNS for the specified domain and print the IP addresses associated with it.

Conclusion

Performing a DNS query with Go is a relatively simple task thanks to the net standard library. With just a few lines of code, you can translate domain names to IP addresses and incorporate this functionality into your Go projects. This is useful in scenarios where you need to get information about the IP addresses associated with a particular domain, such as in the case of name resolution domain name for accessing web services or for network analysis purposes.