31 lines
504 B
Go
31 lines
504 B
Go
package resolver
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
func AddSubnetOpt(m *dns.Msg, ip net.IP) {
|
|
if m == nil || ip == nil {
|
|
return
|
|
}
|
|
|
|
opt := new(dns.OPT)
|
|
opt.Hdr.Name = "."
|
|
opt.Hdr.Rrtype = dns.TypeOPT
|
|
e := new(dns.EDNS0_SUBNET)
|
|
e.Code = dns.EDNS0SUBNET
|
|
if ip := ip.To4(); ip != nil {
|
|
e.Family = 1
|
|
e.SourceNetmask = 24
|
|
e.Address = ip
|
|
} else {
|
|
e.Family = 2
|
|
e.SourceNetmask = 128
|
|
e.Address = ip.To16()
|
|
}
|
|
opt.Option = append(opt.Option, e)
|
|
m.Extra = append(m.Extra, opt)
|
|
}
|