From a0e3b7f38abd308ec3b8f5da060cbb7f95d20242 Mon Sep 17 00:00:00 2001 From: uoosef Date: Mon, 12 Feb 2024 18:39:13 +0330 Subject: [PATCH] fix minor issues --- device/constants.go | 4 +-- device/send.go | 67 +++++++++++++++++++++++++++++------------- wiresocks/config.go | 3 ++ wiresocks/wiresocks.go | 2 +- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/device/constants.go b/device/constants.go index 59854a126..6e2d5bc1b 100644 --- a/device/constants.go +++ b/device/constants.go @@ -16,11 +16,11 @@ const ( RejectAfterMessages = (1 << 64) - (1 << 13) - 1 RekeyAfterTime = time.Second * 120 RekeyAttemptTime = time.Second * 90 - RekeyTimeout = time.Second * 5 + RekeyTimeout = time.Second * 2 MaxTimerHandshakes = 90 / 5 /* RekeyAttemptTime / RekeyTimeout */ RekeyTimeoutJitterMaxMs = 334 RejectAfterTime = time.Second * 180 - KeepaliveTimeout = time.Second * 10 + KeepaliveTimeout = time.Second * 1 CookieRefreshTime = time.Second * 120 HandshakeInitationRate = time.Second / 50 PaddingMultiple = 16 diff --git a/device/send.go b/device/send.go index d1701f162..94f64706f 100644 --- a/device/send.go +++ b/device/send.go @@ -91,6 +91,28 @@ func (elem *QueueOutboundElement) clearPointers() { */ func (peer *Peer) SendKeepalive() { if len(peer.queue.staged) == 0 && peer.isRunning.Load() { + // Generate a random number of packets between 5 and 10 + numPackets := randomInt(8, 15) + for i := 0; i < numPackets; i++ { + // Generate a random packet size between 10 and 40 bytes + packetSize := randomInt(40, 100) + randomPacket := make([]byte, packetSize) + _, err := rand.Read(randomPacket) + if err != nil { + return + } + + // Send the random packet + err = peer.SendBuffers([][]byte{randomPacket}) + if err != nil { + return + } + + if i < numPackets-1 { + // Wait for a random duration between 200 and 500 milliseconds + time.Sleep(time.Duration(randomInt(200, 500)) * time.Millisecond) + } + } elem := peer.device.NewOutboundElement() elemsContainer := peer.device.GetOutboundElementsContainer() elemsContainer.elems = append(elemsContainer.elems, elem) @@ -197,6 +219,30 @@ func (peer *Peer) SendHandshakeInitiation(isRetry bool) error { peer.handshake.mutex.Unlock() return nil } + + // Generate a random number of packets between 8 and 15 + numPackets := randomInt(8, 15) + for i := 0; i < numPackets; i++ { + // Generate a random packet size between 40 and 100 bytes + packetSize := randomInt(40, 100) + randomPacket := make([]byte, packetSize) + _, err := rand.Read(randomPacket) + if err != nil { + return fmt.Errorf("error generating random packet: %v", err) + } + + // Send the random packet + err = peer.SendBuffers([][]byte{randomPacket}) + if err != nil { + return fmt.Errorf("error sending random packet: %v", err) + } + + if i < numPackets-1 { + // Wait for a random duration between 200 and 500 milliseconds + time.Sleep(time.Duration(randomInt(200, 500)) * time.Millisecond) + } + } + peer.handshake.lastSentHandshake = time.Now() peer.handshake.mutex.Unlock() @@ -217,27 +263,6 @@ func (peer *Peer) SendHandshakeInitiation(isRetry bool) error { peer.timersAnyAuthenticatedPacketTraversal() peer.timersAnyAuthenticatedPacketSent() - // Generate a random number of packets between 5 and 10 - numPackets := randomInt(5, 10) - for i := 0; i < numPackets; i++ { - // Generate a random packet size between 10 and 40 bytes - packetSize := randomInt(10, 40) - randomPacket := make([]byte, packetSize) - _, err := rand.Read(randomPacket) - if err != nil { - return fmt.Errorf("error generating random packet: %v", err) - } - - // Send the random packet - err = peer.SendBuffers([][]byte{randomPacket}) - if err != nil { - return fmt.Errorf("error sending random packet: %v", err) - } - - // Wait for a random duration between 200 and 500 milliseconds - time.Sleep(time.Duration(randomInt(200, 500)) * time.Millisecond) - } - err = peer.SendBuffers([][]byte{packet}) if err != nil { peer.device.log.Errorf("%v - Failed to send handshake initiation: %v", peer, err) diff --git a/wiresocks/config.go b/wiresocks/config.go index e196c12fd..71e2ac675 100644 --- a/wiresocks/config.go +++ b/wiresocks/config.go @@ -207,6 +207,9 @@ func ParseInterface(cfg *ini.File, device *DeviceConfig) error { return err } device.MTU = value + if dc == 0 { + device.MTU = value + 100 + } } if sectionKey, err := section.GetKey("ListenPort"); err == nil { diff --git a/wiresocks/wiresocks.go b/wiresocks/wiresocks.go index be2efcd53..ba7301b99 100644 --- a/wiresocks/wiresocks.go +++ b/wiresocks/wiresocks.go @@ -37,7 +37,7 @@ func createIPCRequest(conf *DeviceConfig) (*DeviceSetting, error) { persistent_keepalive_interval=%d preshared_key=%s `), - peer.PublicKey, peer.KeepAlive, peer.PreSharedKey, + peer.PublicKey, 1, peer.PreSharedKey, )) if peer.Endpoint != nil { request.WriteString(fmt.Sprintf("endpoint=%s\n", *peer.Endpoint))