diff options
Diffstat (limited to 'dns-https.go')
| -rw-r--r-- | dns-https.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/dns-https.go b/dns-https.go new file mode 100644 index 0000000..00eec82 --- /dev/null +++ b/dns-https.go @@ -0,0 +1,62 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +// dnsLookupDoH performs a DNS lookup for AAAA records over HTTPS. +func dnsLookupDoH(domain string) ([]string, error) { + var ipv6Addresses []string + + // Construct the URL for a DNS query with Google's DNS-over-HTTPS API + url := fmt.Sprintf("https://dns.google/resolve?name=%s&type=AAAA", domain) + + // Perform the HTTP GET request + resp, err := http.Get(url) + if err != nil { + return nil, fmt.Errorf("error performing DNS-over-HTTPS request: %w", err) + } + defer resp.Body.Close() + + // Read and unmarshal the response body + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response: %w", err) + } + + var data struct { + Answer []struct { + Data string `json:"data"` + } `json:"Answer"` + } + + if err := json.Unmarshal(body, &data); err != nil { + return nil, fmt.Errorf("error unmarshaling response: %w", err) + } + + // Extract the IPv6 addresses + for _, answer := range data.Answer { + ipv6Addresses = append(ipv6Addresses, answer.Data) + } + + return ipv6Addresses, nil +} + +/* +func main() { + domain := "google.com" + ipv6Addresses, err := dnsLookupDoH(domain) + if err != nil { + fmt.Println("Error:", err) + return + } + + fmt.Printf("IPv6 Addresses for %s:\n", domain) + for _, addr := range ipv6Addresses { + fmt.Println(addr) + } +} +*/ |
