这个DNS系列现在有以下几篇文章
完整代码请看DNS
注意: 这里我只完成了请求字段,主要原因是因为我学习这些DNS协议是为了找到防止DNS污染的方法,而DNSSEC并不能,而且应答头比较复杂,可能还要了解ssl和tls的知识,所以这里我没有完成代码,想了解的请看protocol change rfc4034 rfc4035 Algorithm
DNSSEC也是使用了EDNS,而且只需要改一个字段,就是之前提到Z,具体协议请看
+0 (MSB) +1 (LSB) +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+0: | EXTENDED-RCODE | VERSION |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+2: |DO| Z |+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
完成请求头
type eDNSHeader struct { DnsHeader []byte Name [1]byte Type [2]byte PayloadSize [2]byte ExtendRCode [1]byte EDNSVersion [1]byte Z [2]byte Data []byte} func createDNSSEC(domain string, reqType2 reqType) (header eDNSHeader, b []byte) { // eDNSHeader := createEDNSReq(domain,reqType2,[]byte{}) header = eDNSHeader{} header.DnsHeader = creatRequest(domain, reqType2) header.Name[0] = 0b0 header.Type = [2]byte{0b00000000, 0b00101001} header.PayloadSize = [2]byte{0b00010000, 0b00000000} // 4096 header.ExtendRCode = [1]byte{0b00000000} header.EDNSVersion = [1]byte{0b00000000} header.Z = [2]byte{0b10000000, 0b00000000} // Do bit = 1 return header, createEDNSRequ(header)}
是不是很简单,再结合之前的EDNS就能完成完整的请求
0 条评论