From 208deccd09b3e9f90fc5c39c16271a53c1128ef2 Mon Sep 17 00:00:00 2001 From: xtaci Date: Sat, 15 Oct 2022 11:07:47 +0800 Subject: [PATCH] use rand port instead of sequential pattern --- client/dial.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/client/dial.go b/client/dial.go index 7bcead1b2..089c8b927 100644 --- a/client/dial.go +++ b/client/dial.go @@ -1,6 +1,8 @@ package main import ( + "crypto/rand" + "encoding/binary" "fmt" "github.com/pkg/errors" @@ -9,19 +11,19 @@ import ( "github.com/xtaci/tcpraw" ) -var dialCount uint64 - func dial(config *Config, block kcp.BlockCrypt) (*kcp.UDPSession, error) { - defer func() { - dialCount++ - }() - mp, err := generic.ParseMultiPort(config.RemoteAddr) if err != nil { return nil, err } - remoteAddr := fmt.Sprintf("%v:%v", mp.Host, uint64(mp.MinPort)+dialCount%uint64(mp.MaxPort-mp.MinPort+1)) + var randport uint64 + err = binary.Read(rand.Reader, binary.LittleEndian, &randport) + if err != nil { + return nil, err + } + + remoteAddr := fmt.Sprintf("%v:%v", mp.Host, uint64(mp.MinPort)+randport%uint64(mp.MaxPort-mp.MinPort+1)) if config.TCP { conn, err := tcpraw.Dial("tcp", remoteAddr)