summaryrefslogtreecommitdiff
path: root/utils/dns_utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'utils/dns_utils.go')
-rw-r--r--utils/dns_utils.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/utils/dns_utils.go b/utils/dns_utils.go
new file mode 100644
index 0000000..f6d4578
--- /dev/null
+++ b/utils/dns_utils.go
@@ -0,0 +1,55 @@
+package utils
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/miekg/dns"
+)
+
+type WrongAnswerError struct {
+ Message string
+}
+
+func (e *WrongAnswerError) Error() string {
+ return fmt.Sprintf("Wrong Answer: %s", e.Message)
+}
+
+func SendQuery(addr string, dn string) (string, error) {
+ var (
+ domain string
+ rdns_ip string
+ )
+ if dn == "timestamp" {
+ timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
+ domain = strings.Join([]string{timestamp, "-scan.echodns.xyz."}, "")
+ } else {
+ domain = strings.Join([]string{dn, ".echodns.xyz."}, "")
+ }
+ //fmt.Println(domain)
+ m := new(dns.Msg)
+ m.SetQuestion(domain, dns.TypeA)
+ m.RecursionDesired = true
+
+ res, err := dns.Exchange(m, addr)
+ if err == nil {
+ if len(res.Answer) == 1 {
+ if a, ok := res.Answer[0].(*dns.A); ok {
+ rdns_ip = a.A.String()
+ } else {
+ rdns_ip = ""
+ err = &WrongAnswerError{
+ Message: "Wrong Record Type",
+ }
+ }
+ } else {
+ rdns_ip = ""
+ err = &WrongAnswerError{
+ Message: "Wrong Answer Section",
+ }
+ }
+ }
+ return rdns_ip, err
+}