Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 31b0d07

Browse files
author
local
committedMar 31, 2024·
proxy dns with NOTIMP error
1 parent c7459b3 commit 31b0d07

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed
 

Diff for: ‎proxy/dns/dns.go

+34-4
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,13 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, d internet.
197197
if isIPQuery {
198198
if domain, err := strmatcher.ToDomain(domain); err == nil {
199199
go h.handleIPQuery(id, qType, domain, writer)
200-
continue
200+
} else {
201+
h.handleDNSError(id, dnsmessage.RCodeFormatError, writer)
201202
}
203+
} else {
204+
h.handleDNSError(id, dnsmessage.RCodeNotImplemented, writer)
202205
}
203-
}
204-
205-
if err := connWriter.WriteMessage(b); err != nil {
206+
} else if err := connWriter.WriteMessage(b); err != nil {
206207
return err
207208
}
208209
}
@@ -296,6 +297,35 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string,
296297
}
297298
}
298299

300+
func (h *Handler) handleDNSError(id uint16, rCode dnsmessage.RCode, writer dns_proto.MessageWriter) {
301+
var err error
302+
303+
b := buf.New()
304+
rawBytes := b.Extend(buf.Size)
305+
builder := dnsmessage.NewBuilder(rawBytes[:0], dnsmessage.Header{
306+
ID: id,
307+
RCode: rCode,
308+
RecursionAvailable: true,
309+
RecursionDesired: true,
310+
Response: true,
311+
})
312+
builder.EnableCompression()
313+
common.Must(builder.StartQuestions())
314+
common.Must(builder.StartAnswers())
315+
316+
msgBytes, err := builder.Finish()
317+
if err != nil {
318+
newError("pack message").Base(err).WriteToLog()
319+
b.Release()
320+
return
321+
}
322+
b.Resize(0, int32(len(msgBytes)))
323+
324+
if err := writer.WriteMessage(b); err != nil {
325+
newError("write IP answer").Base(err).WriteToLog()
326+
}
327+
}
328+
299329
type outboundConn struct {
300330
access sync.Mutex
301331
dialer func() (internet.Connection, error)

0 commit comments

Comments
 (0)
Please sign in to comment.