Store IP addresses, not references
This commit is contained in:
parent
734483226b
commit
8899389d8b
|
@ -40,6 +40,15 @@ func RefusedResponseFromMessage(srcMsg *dns.Msg, refusedCode bool) (*dns.Msg, er
|
||||||
dstMsg.Rcode = dns.RcodeRefused
|
dstMsg.Rcode = dns.RcodeRefused
|
||||||
} else {
|
} else {
|
||||||
dstMsg.Rcode = dns.RcodeSuccess
|
dstMsg.Rcode = dns.RcodeSuccess
|
||||||
|
questions := srcMsg.Question
|
||||||
|
if len(questions) > 0 {
|
||||||
|
hinfo := new(dns.HINFO)
|
||||||
|
hinfo.Hdr = dns.RR_Header{Name: questions[0].Name, Rrtype: dns.TypeHINFO,
|
||||||
|
Class: dns.ClassINET, Ttl: 1}
|
||||||
|
hinfo.Cpu = "This query has been locally blocked"
|
||||||
|
hinfo.Os = "by dnscrypt-proxy"
|
||||||
|
dstMsg.Answer = []dns.RR{hinfo}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return dstMsg, nil
|
return dstMsg, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,8 @@ import (
|
||||||
|
|
||||||
type CloakedName struct {
|
type CloakedName struct {
|
||||||
target string
|
target string
|
||||||
ipv4 []*net.IP
|
ipv4 []net.IP
|
||||||
ipv6 []*net.IP
|
ipv6 []net.IP
|
||||||
lastUpdate *time.Time
|
lastUpdate *time.Time
|
||||||
lineNo int
|
lineNo int
|
||||||
isIP bool
|
isIP bool
|
||||||
|
@ -69,9 +69,9 @@ func (plugin *PluginCloak) Init(proxy *Proxy) error {
|
||||||
}
|
}
|
||||||
if ip := net.ParseIP(target); ip != nil {
|
if ip := net.ParseIP(target); ip != nil {
|
||||||
if ipv4 := ip.To4(); ipv4 != nil {
|
if ipv4 := ip.To4(); ipv4 != nil {
|
||||||
cloakedName.ipv4 = append((*cloakedName).ipv4, &ipv4)
|
cloakedName.ipv4 = append((*cloakedName).ipv4, ipv4)
|
||||||
} else if ipv6 := ip.To16(); ipv6 != nil {
|
} else if ipv6 := ip.To16(); ipv6 != nil {
|
||||||
cloakedName.ipv6 = append((*cloakedName).ipv6, &ipv6)
|
cloakedName.ipv6 = append((*cloakedName).ipv6, ipv6)
|
||||||
} else {
|
} else {
|
||||||
dlog.Errorf("Invalid IP address in cloaking rule at line %d", 1+lineNo)
|
dlog.Errorf("Invalid IP address in cloaking rule at line %d", 1+lineNo)
|
||||||
continue
|
continue
|
||||||
|
@ -139,12 +139,12 @@ func (plugin *PluginCloak) Eval(pluginsState *PluginsState, msg *dns.Msg) error
|
||||||
cloakedName.ipv6 = nil
|
cloakedName.ipv6 = nil
|
||||||
for _, foundIP := range foundIPs {
|
for _, foundIP := range foundIPs {
|
||||||
if ipv4 := foundIP.To4(); ipv4 != nil {
|
if ipv4 := foundIP.To4(); ipv4 != nil {
|
||||||
cloakedName.ipv4 = append(cloakedName.ipv4, &foundIP)
|
cloakedName.ipv4 = append(cloakedName.ipv4, foundIP)
|
||||||
if len(cloakedName.ipv4) >= 16 {
|
if len(cloakedName.ipv4) >= 16 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
cloakedName.ipv6 = append(cloakedName.ipv6, &foundIP)
|
cloakedName.ipv6 = append(cloakedName.ipv6, foundIP)
|
||||||
if len(cloakedName.ipv6) >= 16 {
|
if len(cloakedName.ipv6) >= 16 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -158,12 +158,12 @@ func (plugin *PluginCloak) Eval(pluginsState *PluginsState, msg *dns.Msg) error
|
||||||
if question.Qtype == dns.TypeA {
|
if question.Qtype == dns.TypeA {
|
||||||
ipLen := len(cloakedName.ipv4)
|
ipLen := len(cloakedName.ipv4)
|
||||||
if ipLen > 0 {
|
if ipLen > 0 {
|
||||||
ip = cloakedName.ipv4[rand.Intn(ipLen)]
|
ip = &cloakedName.ipv4[rand.Intn(ipLen)]
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ipLen := len(cloakedName.ipv6)
|
ipLen := len(cloakedName.ipv6)
|
||||||
if ipLen > 0 {
|
if ipLen > 0 {
|
||||||
ip = cloakedName.ipv6[rand.Intn(ipLen)]
|
ip = &cloakedName.ipv6[rand.Intn(ipLen)]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
synth, err := EmptyResponseFromMessage(msg)
|
synth, err := EmptyResponseFromMessage(msg)
|
||||||
|
|
Loading…
Reference in New Issue