Skip to content

Instantly share code, notes, and snippets.

@dilfish
Last active April 23, 2023 02:30
Show Gist options
  • Save dilfish/4f8ee232a7d0cec891933bd9b492505b to your computer and use it in GitHub Desktop.
Save dilfish/4f8ee232a7d0cec891933bd9b492505b to your computer and use it in GitHub Desktop.
dig svcb dns type
package main
import (
"errors"
"flag"
"fmt"
"log"
"github.com/miekg/dns"
)
var ErrInvalidName = errors.New("not a valid domain name")
var FlagDomain = flag.String("d", "www.dilfish.dev.", "domain name to query")
func DoHTTPS(name string) (*dns.MsgHdr, []dns.RR, []dns.RR, []dns.RR, error) {
if name[len(name)-1] != '.' {
name = name + "."
}
if len(name) < 3 {
return nil, nil, nil, nil, ErrInvalidName
}
msg := new(dns.Msg)
msg.Id = dns.Id()
msg.RecursionDesired = true
msg.Question = make([]dns.Question, 1)
msg.Question[0] = dns.Question{
Name: name,
Qtype: dns.TypeHTTPS,
Qclass: dns.ClassINET,
}
c := new(dns.Client)
in, _, err := c.Exchange(msg, "1.1.1.1:53")
if err != nil {
log.Println("Query 1.1.1.1 for", name, "error:", err)
return nil, nil, nil, nil, err
}
return &in.MsgHdr, in.Answer, in.Ns, in.Extra, nil
}
func PrintHTTPS(hdr *dns.MsgHdr, rr, ns, ex []dns.RR) {
fmt.Println(hdr)
if len(rr) > 0 {
fmt.Println("DNS Answers:")
}
for _, r := range rr {
h, ok := r.(*dns.HTTPS)
if !ok {
fmt.Println("Not https:", r)
} else {
fmt.Println(h.Hdr.Name, h.Hdr.Ttl, dns.Type(h.Hdr.Rrtype).String())
for _, v := range h.Value {
fmt.Println(v.Key().String() + ": " + v.String())
}
}
}
if len(ns) > 0 {
fmt.Println("DNS Authoratives:")
for _, n := range ns {
fmt.Println(n)
}
}
if len(ex) > 0 {
fmt.Println("Extra Data:")
for _, e := range ex {
fmt.Println(e)
}
}
}
func main() {
flag.Parse()
hdr, rr, ns, ex, err := DoHTTPS(*FlagDomain)
if err != nil {
log.Println("doHTTPS error:", err)
return
}
PrintHTTPS(hdr, rr, ns, ex)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment