Use EDNS0 padding for local DoH

This commit is contained in:
Frank Denis 2020-01-05 21:12:29 -05:00
parent 6fb42d0eae
commit 7fb62d98ea
1 changed files with 11 additions and 3 deletions

View File

@ -6,10 +6,10 @@ import (
"io/ioutil"
"net"
"net/http"
"strings"
"time"
"github.com/jedisct1/dlog"
"github.com/miekg/dns"
)
type localDoHHandler struct {
@ -52,11 +52,19 @@ func (handler localDoHHandler) ServeHTTP(writer http.ResponseWriter, request *ht
writer.WriteHeader(500)
return
}
msg := dns.Msg{}
if err := msg.Unpack(packet); err != nil {
writer.WriteHeader(500)
return
}
padLen := 127 - (len(response)+127)&127
paddedResponse, err := addEDNS0PaddingIfNoneFound(&msg, response, padLen)
if err != nil {
return
}
writer.Header().Set("Content-Type", dataType)
writer.Header().Set("X-Pad", strings.Repeat("X", padLen))
writer.WriteHeader(200)
writer.Write(response)
writer.Write(paddedResponse)
}
func (proxy *Proxy) localDoHListener(acceptPc *net.TCPListener) {