dns: add TypeDNAME.
Add TypeDNAME = 39 support, refer to rfc6672 .
The reason of this PR is I encountered an error unpacking Answer: invalid resource type: W while using dnsmessage.Message to unpack the response of api.smoot.apple.cn.
And the response of api.smoot.apple.cn is:
; <<>> DiG 9.10.6 <<>> @8.8.8.8 api.smoot.apple.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48335
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;api.smoot.apple.cn. IN A
;; ANSWER SECTION:
smoot.apple.cn. 21436 IN DNAME smoot.apple.com.
api.smoot.apple.cn. 21436 IN CNAME api.smoot.apple.com.
api.smoot.apple.com. 3436 IN CNAME api-glb.smoot.apple.com.
api-glb.smoot.apple.com. 136 IN A 17.252.201.246
;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Feb 18 23:12:48 CST 2020
;; MSG SIZE rcvd: 147
Since there is no api to ignore unsupported resource type, I add a little bit code to implement it, and the string of message is:
dnsmessage.Message{Header: dnsmessage.Header{ID: 36331, Response: true, OpCode: 0, Authoritative: false, Truncated: false, RecursionDesired: true, RecursionAvailable: true, RCode: dnsmessage.RCodeSuccess},
Questions: []dnsmessage.Question{
dnsmessage.Question{Name: dnsmessage.MustNewName("api.smoot.apple.cn."), Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET}
},
Answers: []dnsmessage.Resource{
dnsmessage.Resource{
Header: dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName("smoot.apple.cn."), Type: dnsmessage.TypeDNAME, Class: dnsmessage.ClassINET, TTL: 75, Length: 17},
Body: &dnsmessage.DNAMEResource{DNAME: dnsmessage.MustNewName("smoot.apple.com.")}
},
dnsmessage.Resource{
Header: dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName("api.smoot.apple.cn."), Type: dnsmessage.TypeCNAME, Class: dnsmessage.ClassINET, TTL: 75, Length: 6},
Body: &dnsmessage.CNAMEResource{CNAME: dnsmessage.MustNewName("api.smoot.apple.com.")}
},
dnsmessage.Resource{
Header: dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName("api.smoot.apple.com."), Type: dnsmessage.TypeCNAME, Class: dnsmessage.ClassINET, TTL: 75, Length: 10},
Body: &dnsmessage.CNAMEResource{CNAME: dnsmessage.MustNewName("api-glb.smoot.apple.com.")}
},
dnsmessage.Resource{
Header: dnsmessage.ResourceHeader{Name: dnsmessage.MustNewName("api-glb.smoot.apple.com."), Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET, TTL: 75, Length: 4},
Body: &dnsmessage.AResource{A: [4]byte{17, 252, 201, 246}}
}
},
Authorities: []dnsmessage.Resource{},
Additionals: []dnsmessage.Resource{}
}
This PR (HEAD: 221a808ae6b2361a73547c811e5af8dbf769b948) has been imported to Gerrit for code review.
Please visit https://go-review.googlesource.com/c/net/+/219839 to see it.
Tip: You can toggle comments from me using the comments slash command (e.g. /comments off)
See the Wiki page for more info
This PR (HEAD: ec33b19b22334b396b96be76b8104ef90325bdee) has been imported to Gerrit for code review.
Please visit https://go-review.googlesource.com/c/net/+/219839 to see it.
Tip: You can toggle comments from me using the comments slash command (e.g. /comments off)
See the Wiki page for more info