// Create a new DNS message msg := new(dns.Msg) msg.SetQuestion("example.com.", dns.TypeA) // Send the message to a DNS server and parse the response resp, err := dns.Exchange(msg, "8.8.8.8:53") if err != nil { log.Fatal(err) } // Print the answer section of the message for _, ans := range resp.Answer { fmt.Println(ans) }
// Parse a DNS message msg := new(dns.Msg) err := msg.Unpack([]byte{ /* DNS message bytes */ }) if err != nil { log.Fatal(err) } // Modify the message by adding a new answer ans := &dns.A{ Hdr: dns.RR_Header{Name: "example.com.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 3600}, A: net.ParseIP("192.168.0.1"), } msg.Answer = append(msg.Answer, ans) // Serialize the modified message to bytes b, err := msg.Pack() if err != nil { log.Fatal(err) } // Send the message over UDP to a DNS server conn, err := net.Dial("udp", "8.8.8.8:53") if err != nil { log.Fatal(err) } _, err = conn.Write(b) if err != nil { log.Fatal(err) }This example starts by parsing a DNS message from bytes. The message is then modified by adding a new answer section with an "A" record for the IP address "192.168.0.1". The modified message is serialized to bytes, and then sent over UDP to the DNS server at IP address "8.8.8.8".