Skip to content

Commit

Permalink
proxy dns with NOTIMP error
Browse files Browse the repository at this point in the history
  • Loading branch information
robberphex authored and local committed Mar 30, 2024
1 parent c7459b3 commit 54f59a2
Showing 1 changed file with 34 additions and 4 deletions.
38 changes: 34 additions & 4 deletions proxy/dns/dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,12 +197,13 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, d internet.
if isIPQuery {
if domain, err := strmatcher.ToDomain(domain); err == nil {
go h.handleIPQuery(id, qType, domain, writer)
continue
} else {
h.handleDNSError(id, dnsmessage.RCodeFormatError, writer)
}
} else {
h.handleDNSError(id, dnsmessage.RCodeNotImplemented, writer)
}
}

if err := connWriter.WriteMessage(b); err != nil {
} else if err := connWriter.WriteMessage(b); err != nil {
return err
}
}
Expand Down Expand Up @@ -296,6 +297,35 @@ func (h *Handler) handleIPQuery(id uint16, qType dnsmessage.Type, domain string,
}
}

func (h *Handler) handleDNSError(id uint16, rCode dnsmessage.RCode, writer dns_proto.MessageWriter) {
var err error

b := buf.New()
rawBytes := b.Extend(buf.Size)
builder := dnsmessage.NewBuilder(rawBytes[:0], dnsmessage.Header{
ID: id,
RCode: rCode,
RecursionAvailable: true,
RecursionDesired: true,
Response: true,
})
builder.EnableCompression()
common.Must(builder.StartQuestions())
common.Must(builder.StartAnswers())

msgBytes, err := builder.Finish()
if err != nil {
newError("pack message").Base(err).WriteToLog()
b.Release()
return
}
b.Resize(0, int32(len(msgBytes)))

if err := writer.WriteMessage(b); err != nil {
newError("write IP answer").Base(err).WriteToLog()
}
}

type outboundConn struct {
access sync.Mutex
dialer func() (internet.Connection, error)
Expand Down

0 comments on commit 54f59a2

Please sign in to comment.