mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-02-23 12:42:27 +08:00
fix: truncate dns message in udp response
https://github.com/MetaCubeX/mihomo/issues/1168
This commit is contained in:
parent
72df27be44
commit
bd703b8ff2
@ -46,7 +46,7 @@ func RelayDnsConn(ctx context.Context, conn net.Conn, readTimeout time.Duration)
|
|||||||
ctx, cancel := context.WithTimeout(ctx, DefaultDnsRelayTimeout)
|
ctx, cancel := context.WithTimeout(ctx, DefaultDnsRelayTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
inData := buff[:n]
|
inData := buff[:n]
|
||||||
msg, err := RelayDnsPacket(ctx, inData, buff)
|
msg, err := relayDnsPacket(ctx, inData, buff, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ func RelayDnsConn(ctx context.Context, conn net.Conn, readTimeout time.Duration)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func RelayDnsPacket(ctx context.Context, payload []byte, target []byte) ([]byte, error) {
|
func relayDnsPacket(ctx context.Context, payload []byte, target []byte, maxSize int) ([]byte, error) {
|
||||||
msg := &D.Msg{}
|
msg := &D.Msg{}
|
||||||
if err := msg.Unpack(payload); err != nil {
|
if err := msg.Unpack(payload); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -83,6 +83,14 @@ func RelayDnsPacket(ctx context.Context, payload []byte, target []byte) ([]byte,
|
|||||||
}
|
}
|
||||||
|
|
||||||
r.SetRcode(msg, r.Rcode)
|
r.SetRcode(msg, r.Rcode)
|
||||||
|
if maxSize > 0 {
|
||||||
|
r.Truncate(maxSize)
|
||||||
|
}
|
||||||
r.Compress = true
|
r.Compress = true
|
||||||
return r.PackBuffer(target)
|
return r.PackBuffer(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RelayDnsPacket will truncate udp message up to SafeDnsPacketSize
|
||||||
|
func RelayDnsPacket(ctx context.Context, payload []byte, target []byte) ([]byte, error) {
|
||||||
|
return relayDnsPacket(ctx, payload, target, SafeDnsPacketSize)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user