下面是一段Golang的代码,演示开发者如何使用DoH查询域名alibaba.com。
package main
import (
"encoding/base64"
"fmt"
"github.com/miekg/dns"
"io/ioutil"
"net/http"
"os"
)
func main() {
query := dns.Msg{}
query.SetQuestion("www.taobao.com.", dns.TypeA)
msg, _ := query.Pack()
b64 := base64.RawURLEncoding.EncodeToString(msg)
resp, err := http.Get("https://5***4-2h*****ynx3tls.alidns.com/dns-query?dns=" + b64)
if err != nil {
fmt.Printf("Send query error, err:%v\n", err)
os.Exit(1)
}
defer resp.Body.Close()
bodyBytes, _ := ioutil.ReadAll(resp.Body)
response := dns.Msg{}
response.Unpack(bodyBytes)
fmt.Printf("Dns answer is :%v\n", response.String())
}运行结果如下:
Sent Get query https://dns.alidns.com/dns-query?dns=xzEBAAABAAAAAAAAA3d3dwZ0YW9iYW8DY29tAAABAAE
Dns answer is :;; opcode: QUERY, status: NOERROR, id: 5***3
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.taobao.com. IN A
;; ANSWER SECTION:
www.taobao.com. 15 IN CNAME www.taobao.com.danuoyi.tbcache.com.
www.taobao.com.danuoyi.tbcache.com. 15 IN A 221.229.XXX.XXX
www.taobao.com.danuoyi.tbcache.com. 15 IN A 221.229.XXX.XXX
;; ADDITIONAL SECTION:
;; OPT PSEUDOSECTION:
; EDNS: version 0; flags: ; udp: 4096