mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-06 11:48:47 +00:00
Finalmask: Add randRange to "noise" (UDP), as the same as "header-custom"'s (TCP & UDP) (#5850)
https://github.com/XTLS/Xray-core/pull/5812
This commit is contained in:
@@ -1425,10 +1425,11 @@ func (c *FragmentMask) Build() (proto.Message, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type NoiseItem struct {
|
type NoiseItem struct {
|
||||||
Rand Int32Range `json:"rand"`
|
Rand Int32Range `json:"rand"`
|
||||||
Type string `json:"type"`
|
RandRange *Int32Range `json:"randRange"`
|
||||||
Packet json.RawMessage `json:"packet"`
|
Type string `json:"type"`
|
||||||
Delay Int32Range `json:"delay"`
|
Packet json.RawMessage `json:"packet"`
|
||||||
|
Delay Int32Range `json:"delay"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type NoiseMask struct {
|
type NoiseMask struct {
|
||||||
@@ -1445,16 +1446,24 @@ func (c *NoiseMask) Build() (proto.Message, error) {
|
|||||||
|
|
||||||
noiseSlice := make([]*noise.Item, 0, len(c.Noise))
|
noiseSlice := make([]*noise.Item, 0, len(c.Noise))
|
||||||
for _, item := range c.Noise {
|
for _, item := range c.Noise {
|
||||||
|
if item.RandRange == nil {
|
||||||
|
item.RandRange = &Int32Range{From: 0, To: 255}
|
||||||
|
}
|
||||||
|
if item.RandRange.From < 0 || item.RandRange.To > 255 {
|
||||||
|
return nil, errors.New("invalid randRange")
|
||||||
|
}
|
||||||
var err error
|
var err error
|
||||||
if item.Packet, err = PraseByteSlice(item.Packet, item.Type); err != nil {
|
if item.Packet, err = PraseByteSlice(item.Packet, item.Type); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
noiseSlice = append(noiseSlice, &noise.Item{
|
noiseSlice = append(noiseSlice, &noise.Item{
|
||||||
RandMin: int64(item.Rand.From),
|
RandMin: int64(item.Rand.From),
|
||||||
RandMax: int64(item.Rand.To),
|
RandMax: int64(item.Rand.To),
|
||||||
Packet: item.Packet,
|
RandRangeMin: item.RandRange.From,
|
||||||
DelayMin: int64(item.Delay.From),
|
RandRangeMax: item.RandRange.To,
|
||||||
DelayMax: int64(item.Delay.To),
|
Packet: item.Packet,
|
||||||
|
DelayMin: int64(item.Delay.From),
|
||||||
|
DelayMax: int64(item.Delay.To),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,11 @@ type Item struct {
|
|||||||
state protoimpl.MessageState `protogen:"open.v1"`
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
RandMin int64 `protobuf:"varint,1,opt,name=rand_min,json=randMin,proto3" json:"rand_min,omitempty"`
|
RandMin int64 `protobuf:"varint,1,opt,name=rand_min,json=randMin,proto3" json:"rand_min,omitempty"`
|
||||||
RandMax int64 `protobuf:"varint,2,opt,name=rand_max,json=randMax,proto3" json:"rand_max,omitempty"`
|
RandMax int64 `protobuf:"varint,2,opt,name=rand_max,json=randMax,proto3" json:"rand_max,omitempty"`
|
||||||
Packet []byte `protobuf:"bytes,3,opt,name=packet,proto3" json:"packet,omitempty"`
|
RandRangeMin int32 `protobuf:"varint,3,opt,name=rand_range_min,json=randRangeMin,proto3" json:"rand_range_min,omitempty"`
|
||||||
DelayMin int64 `protobuf:"varint,4,opt,name=delay_min,json=delayMin,proto3" json:"delay_min,omitempty"`
|
RandRangeMax int32 `protobuf:"varint,4,opt,name=rand_range_max,json=randRangeMax,proto3" json:"rand_range_max,omitempty"`
|
||||||
DelayMax int64 `protobuf:"varint,5,opt,name=delay_max,json=delayMax,proto3" json:"delay_max,omitempty"`
|
Packet []byte `protobuf:"bytes,5,opt,name=packet,proto3" json:"packet,omitempty"`
|
||||||
|
DelayMin int64 `protobuf:"varint,6,opt,name=delay_min,json=delayMin,proto3" json:"delay_min,omitempty"`
|
||||||
|
DelayMax int64 `protobuf:"varint,7,opt,name=delay_max,json=delayMax,proto3" json:"delay_max,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
@@ -76,6 +78,20 @@ func (x *Item) GetRandMax() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *Item) GetRandRangeMin() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.RandRangeMin
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Item) GetRandRangeMax() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.RandRangeMax
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
func (x *Item) GetPacket() []byte {
|
func (x *Item) GetPacket() []byte {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Packet
|
return x.Packet
|
||||||
@@ -161,13 +177,15 @@ var File_transport_internet_finalmask_noise_config_proto protoreflect.FileDescri
|
|||||||
|
|
||||||
const file_transport_internet_finalmask_noise_config_proto_rawDesc = "" +
|
const file_transport_internet_finalmask_noise_config_proto_rawDesc = "" +
|
||||||
"\n" +
|
"\n" +
|
||||||
"/transport/internet/finalmask/noise/config.proto\x12'xray.transport.internet.finalmask.noise\"\x8e\x01\n" +
|
"/transport/internet/finalmask/noise/config.proto\x12'xray.transport.internet.finalmask.noise\"\xda\x01\n" +
|
||||||
"\x04Item\x12\x19\n" +
|
"\x04Item\x12\x19\n" +
|
||||||
"\brand_min\x18\x01 \x01(\x03R\arandMin\x12\x19\n" +
|
"\brand_min\x18\x01 \x01(\x03R\arandMin\x12\x19\n" +
|
||||||
"\brand_max\x18\x02 \x01(\x03R\arandMax\x12\x16\n" +
|
"\brand_max\x18\x02 \x01(\x03R\arandMax\x12$\n" +
|
||||||
"\x06packet\x18\x03 \x01(\fR\x06packet\x12\x1b\n" +
|
"\x0erand_range_min\x18\x03 \x01(\x05R\frandRangeMin\x12$\n" +
|
||||||
"\tdelay_min\x18\x04 \x01(\x03R\bdelayMin\x12\x1b\n" +
|
"\x0erand_range_max\x18\x04 \x01(\x05R\frandRangeMax\x12\x16\n" +
|
||||||
"\tdelay_max\x18\x05 \x01(\x03R\bdelayMax\"\x87\x01\n" +
|
"\x06packet\x18\x05 \x01(\fR\x06packet\x12\x1b\n" +
|
||||||
|
"\tdelay_min\x18\x06 \x01(\x03R\bdelayMin\x12\x1b\n" +
|
||||||
|
"\tdelay_max\x18\a \x01(\x03R\bdelayMax\"\x87\x01\n" +
|
||||||
"\x06Config\x12\x1b\n" +
|
"\x06Config\x12\x1b\n" +
|
||||||
"\treset_min\x18\x01 \x01(\x03R\bresetMin\x12\x1b\n" +
|
"\treset_min\x18\x01 \x01(\x03R\bresetMin\x12\x1b\n" +
|
||||||
"\treset_max\x18\x02 \x01(\x03R\bresetMax\x12C\n" +
|
"\treset_max\x18\x02 \x01(\x03R\bresetMax\x12C\n" +
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ option java_multiple_files = true;
|
|||||||
message Item {
|
message Item {
|
||||||
int64 rand_min = 1;
|
int64 rand_min = 1;
|
||||||
int64 rand_max = 2;
|
int64 rand_max = 2;
|
||||||
bytes packet = 3;
|
int32 rand_range_min = 3;
|
||||||
int64 delay_min = 4;
|
int32 rand_range_max = 4;
|
||||||
int64 delay_max = 5;
|
bytes packet = 5;
|
||||||
|
int64 delay_min = 6;
|
||||||
|
int64 delay_max = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Config {
|
message Config {
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
package noise
|
package noise
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
|
||||||
"net"
|
"net"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/xtls/xray-core/common"
|
|
||||||
"github.com/xtls/xray-core/common/crypto"
|
"github.com/xtls/xray-core/common/crypto"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -77,7 +75,7 @@ func (c *noiseConn) WriteTo(p []byte, addr net.Addr) (n int, err error) {
|
|||||||
for _, item := range c.config.Items {
|
for _, item := range c.config.Items {
|
||||||
if item.RandMax > 0 {
|
if item.RandMax > 0 {
|
||||||
item.Packet = make([]byte, crypto.RandBetween(item.RandMin, item.RandMax))
|
item.Packet = make([]byte, crypto.RandBetween(item.RandMin, item.RandMax))
|
||||||
common.Must2(rand.Read(item.Packet))
|
crypto.RandBytesBetween(item.Packet, byte(item.RandRangeMin), byte(item.RandRangeMax))
|
||||||
}
|
}
|
||||||
c.PacketConn.WriteTo(item.Packet, addr)
|
c.PacketConn.WriteTo(item.Packet, addr)
|
||||||
time.Sleep(time.Duration(crypto.RandBetween(item.DelayMin, item.DelayMax)) * time.Millisecond)
|
time.Sleep(time.Duration(crypto.RandBetween(item.DelayMin, item.DelayMax)) * time.Millisecond)
|
||||||
|
|||||||
Reference in New Issue
Block a user