From 2438d14175ac1d24cc3a8e9a64207f8f56d340ee Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Sat, 23 Sep 2023 21:33:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E7=9F=AD=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=B8=8A=E4=BC=A0=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vnt/src/handle/recv_handler.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vnt/src/handle/recv_handler.rs b/vnt/src/handle/recv_handler.rs index d94298b..ddccc4e 100644 --- a/vnt/src/handle/recv_handler.rs +++ b/vnt/src/handle/recv_handler.rs @@ -1,5 +1,6 @@ use std::net::{Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6}; use std::sync::Arc; +use std::time::{Duration, Instant}; use crossbeam_utils::atomic::AtomicCell; use dashmap::DashMap; @@ -53,6 +54,7 @@ pub struct ChannelDataHandler { rsa_cipher: Option, relay: bool, token: String, + time: Arc>, } impl ChannelDataHandler { @@ -93,6 +95,7 @@ impl ChannelDataHandler { rsa_cipher, relay, token, + time: Arc::new(AtomicCell::new(Instant::now())), } } } @@ -132,6 +135,7 @@ impl ChannelDataHandler { && !destination.is_multicast() && destination != current_device.broadcast_address; if current_device.virtual_ip() != destination + && !net_packet.is_gateway() && not_broadcast && !destination.is_unspecified() { @@ -160,6 +164,14 @@ impl ChannelDataHandler { == crate::protocol::error_packet::Protocol::NoKey.into() { if let Some(rsa_cipher) = &self.rsa_cipher { + let last = self.time.load(); + if last.elapsed() < Duration::from_secs(3) + || self.time.compare_exchange(last, Instant::now()).is_err() + { + //短时间不重复上传服务端密钥 + return Ok(()); + } + log::warn!("上传服务端密钥"); secret_handshake_req( context, current_device.connect_server,