mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-04-30 17:38:41 +00:00
UDP noises: Add base64 and multi-packet support (#3794)
https://github.com/XTLS/Xray-core/pull/3794#issuecomment-2351329251 --------- Co-authored-by: 风扇滑翔翼 <Fangliding.fshxy@outlook.com> Co-authored-by: mmmray <142015632+mmmray@users.noreply.github.com>
This commit is contained in:
parent
b1c6471eeb
commit
363e86c585
4 changed files with 131 additions and 120 deletions
|
@ -208,12 +208,11 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
|
|||
}
|
||||
} else {
|
||||
writer = NewPacketWriter(conn, h, ctx, UDPOverride)
|
||||
if h.config.Noise != nil {
|
||||
errors.LogDebug(ctx, "NOISE", h.config.Noise.StrNoise, h.config.Noise.LengthMin, h.config.Noise.LengthMax,
|
||||
h.config.Noise.DelayMin, h.config.Noise.DelayMax)
|
||||
if h.config.Noises != nil {
|
||||
errors.LogDebug(ctx, "NOISE", h.config.Noises)
|
||||
writer = &NoisePacketWriter{
|
||||
Writer: writer,
|
||||
noise: h.config.Noise,
|
||||
noises: h.config.Noises,
|
||||
firstWrite: true,
|
||||
UDPOverride: UDPOverride,
|
||||
}
|
||||
|
@ -396,12 +395,12 @@ func (w *PacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
|
|||
|
||||
type NoisePacketWriter struct {
|
||||
buf.Writer
|
||||
noise *Noise
|
||||
noises []*Noise
|
||||
firstWrite bool
|
||||
UDPOverride net.Destination
|
||||
}
|
||||
|
||||
// MultiBuffer writer with Noise in first packet
|
||||
// MultiBuffer writer with Noise before first packet
|
||||
func (w *NoisePacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
|
||||
if w.firstWrite {
|
||||
w.firstWrite = false
|
||||
|
@ -411,22 +410,23 @@ func (w *NoisePacketWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
|
|||
}
|
||||
var noise []byte
|
||||
var err error
|
||||
//User input string
|
||||
if w.noise.StrNoise != "" {
|
||||
noise = []byte(w.noise.StrNoise)
|
||||
} else {
|
||||
//Random noise
|
||||
noise, err = GenerateRandomBytes(randBetween(int64(w.noise.LengthMin),
|
||||
int64(w.noise.LengthMax)))
|
||||
}
|
||||
for _, n := range w.noises {
|
||||
//User input string or base64 encoded string
|
||||
if n.StrNoise != nil {
|
||||
noise = n.StrNoise
|
||||
} else {
|
||||
//Random noise
|
||||
noise, err = GenerateRandomBytes(randBetween(int64(n.LengthMin),
|
||||
int64(n.LengthMax)))
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
w.Writer.WriteMultiBuffer(buf.MultiBuffer{buf.FromBytes(noise)})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
w.Writer.WriteMultiBuffer(buf.MultiBuffer{buf.FromBytes(noise)})
|
||||
|
||||
if w.noise.DelayMin != 0 {
|
||||
time.Sleep(time.Duration(randBetween(int64(w.noise.DelayMin), int64(w.noise.DelayMax))) * time.Millisecond)
|
||||
if n.DelayMin != 0 {
|
||||
time.Sleep(time.Duration(randBetween(int64(n.DelayMin), int64(n.DelayMax))) * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue