From 7131937d062bb61ca2ce6c1cf3e739fb317c9777 Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Sat, 13 Apr 2024 17:45:46 +0800 Subject: [PATCH] fmt --- vnt/src/channel/context.rs | 5 ++-- vnt/src/cipher/rsa_cipher.rs | 8 +++--- vnt/src/handle/handshaker.rs | 13 ++++------ vnt/src/handle/maintain/idle.rs | 39 ++++++++++++++++++------------ vnt/src/handle/recv_data/mod.rs | 2 +- vnt/src/handle/recv_data/server.rs | 36 ++++++++++++++++----------- vnt/src/protocol/control_packet.rs | 26 ++++++++++++-------- vnt/src/protocol/service_packet.rs | 6 ++--- 8 files changed, 77 insertions(+), 58 deletions(-) diff --git a/vnt/src/channel/context.rs b/vnt/src/channel/context.rs index 25052da..f462953 100644 --- a/vnt/src/channel/context.rs +++ b/vnt/src/channel/context.rs @@ -200,7 +200,8 @@ impl ContextInner { } } pub fn is_default_route(&self, route_key: RouteKey) -> bool { - self.is_tcp == route_key.is_tcp && self.main_index.load(Ordering::Relaxed) == route_key.index + self.is_tcp == route_key.is_tcp + && self.main_index.load(Ordering::Relaxed) == route_key.index } pub fn change_main_index(&self) { let index = (self.main_index.load(Ordering::Relaxed) + 1) % self.main_udp_socket.len(); @@ -299,7 +300,7 @@ impl ContextInner { pub struct RouteTable { pub(crate) route_table: - RwLock)>)>>, + RwLock)>)>>, first_latency: bool, channel_num: usize, use_channel_type: UseChannelType, diff --git a/vnt/src/cipher/rsa_cipher.rs b/vnt/src/cipher/rsa_cipher.rs index ca53910..f66a230 100644 --- a/vnt/src/cipher/rsa_cipher.rs +++ b/vnt/src/cipher/rsa_cipher.rs @@ -1,7 +1,7 @@ use std::io; use { - crate::protocol::body::{RSA_ENCRYPTION_RESERVED, RsaSecretBody}, + crate::protocol::body::{RsaSecretBody, RSA_ENCRYPTION_RESERVED}, rand::Rng, rsa::pkcs8::der::Decode, rsa::RsaPublicKey, @@ -18,7 +18,7 @@ pub struct RsaCipher { #[derive(Clone)] struct Inner { public_key: RsaPublicKey, - finger:String, + finger: String, } impl RsaCipher { @@ -26,7 +26,7 @@ impl RsaCipher { match RsaPublicKey::from_public_key_der(der) { Ok(public_key) => { let finger = finger(&public_key)?; - let inner = Inner { public_key,finger }; + let inner = Inner { public_key, finger }; Ok(Self { inner }) } Err(e) => Err(io::Error::new( @@ -35,7 +35,7 @@ impl RsaCipher { )), } } - pub fn finger(&self) ->&String{ + pub fn finger(&self) -> &String { &self.inner.finger } pub fn public_key(&self) -> io::Result<&RsaPublicKey> { diff --git a/vnt/src/handle/handshaker.rs b/vnt/src/handle/handshaker.rs index 92a5048..0bb65be 100644 --- a/vnt/src/handle/handshaker.rs +++ b/vnt/src/handle/handshaker.rs @@ -28,13 +28,13 @@ pub enum HandshakeEnum { #[derive(Clone)] pub struct Handshake { time: Arc>, - rsa_cipher: Arc>> + rsa_cipher: Arc>>, } impl Handshake { - pub fn new( rsa_cipher: Arc>>) -> Self { + pub fn new(rsa_cipher: Arc>>) -> Self { Handshake { time: Arc::new(AtomicCell::new(Instant::now() - Duration::from_secs(60))), - rsa_cipher + rsa_cipher, } } pub fn send(&self, context: &Context, secret: bool, addr: SocketAddr) -> io::Result<()> { @@ -50,12 +50,11 @@ impl Handshake { Ok(()) } /// 第一次握手数据 - pub fn handshake_request_packet(&self,secret: bool) -> io::Result>> { - + pub fn handshake_request_packet(&self, secret: bool) -> io::Result>> { let mut request = HandshakeRequest::new(); request.secret = secret; request.version = crate::VNT_VERSION.to_string(); - if let Some(finger) = self.rsa_cipher.lock().as_ref().map(|v| v.finger().clone()){ + if let Some(finger) = self.rsa_cipher.lock().as_ref().map(|v| v.finger().clone()) { request.key_finger = finger; } let bytes = request.write_to_bytes().map_err(|e| { @@ -78,8 +77,6 @@ impl Handshake { } } - - /// 第二次加密握手 #[cfg(feature = "server_encrypt")] pub fn secret_handshake_request_packet( diff --git a/vnt/src/handle/maintain/idle.rs b/vnt/src/handle/maintain/idle.rs index 8811ced..1c709e9 100644 --- a/vnt/src/handle/maintain/idle.rs +++ b/vnt/src/handle/maintain/idle.rs @@ -6,14 +6,14 @@ use std::time::Duration; use crossbeam_utils::atomic::AtomicCell; use mio::net::TcpStream; -use crate::{ErrorInfo, VntCallback}; use crate::channel::context::Context; use crate::channel::idle::{Idle, IdleType}; use crate::channel::sender::AcceptSocketSender; -use crate::handle::{BaseConfigInfo, ConnectStatus, CurrentDeviceInfo}; use crate::handle::callback::{ConnectInfo, ErrorType}; use crate::handle::handshaker::Handshake; +use crate::handle::{BaseConfigInfo, ConnectStatus, CurrentDeviceInfo}; use crate::util::Scheduler; +use crate::{ErrorInfo, VntCallback}; pub fn idle_route( scheduler: &Scheduler, @@ -163,23 +163,30 @@ pub fn domain_request0( ) -> CurrentDeviceInfo { let mut current_dev = current_device.load(); // 探测服务端地址变化 - if let Ok(mut addr) = config.server_addr.to_socket_addrs() { - if let Some(addr) = addr.next() { - if addr != current_dev.connect_server { - let mut tmp = current_dev.clone(); - tmp.connect_server = addr; - let rs = current_device.compare_exchange(current_dev, tmp); - log::info!( - "服务端地址变化,旧地址:{},新地址:{},替换结果:{}", - current_dev.connect_server, - addr, - rs.is_ok() - ); - if rs.is_ok() { - current_dev.connect_server = addr; + match config.server_addr.to_socket_addrs() { + Ok(mut addr) => { + if let Some(addr) = addr.next() { + if addr != current_dev.connect_server { + let mut tmp = current_dev.clone(); + tmp.connect_server = addr; + let rs = current_device.compare_exchange(current_dev, tmp); + log::info!( + "服务端地址变化,旧地址:{},新地址:{},替换结果:{}", + current_dev.connect_server, + addr, + rs.is_ok() + ); + if rs.is_ok() { + current_dev.connect_server = addr; + } } + } else { + log::error!("域名解析值为空,domain={}", config.server_addr); } } + Err(e) => { + log::error!("域名解析失败:{:?},domain={}", e, config.server_addr); + } } current_dev } diff --git a/vnt/src/handle/recv_data/mod.rs b/vnt/src/handle/recv_data/mod.rs index 4d8dc10..a4fcd85 100644 --- a/vnt/src/handle/recv_data/mod.rs +++ b/vnt/src/handle/recv_data/mod.rs @@ -111,7 +111,7 @@ impl RecvDataHandler { self.counter.add(buf.len() as _); let net_packet = NetPacket::new(buf)?; if net_packet.ttl() == 0 || net_packet.source_ttl() < net_packet.ttl() { - log::warn!("丢弃过时包:{:?}",net_packet.head()); + log::warn!("丢弃过时包:{:?}", net_packet.head()); return Ok(()); } let current_device = self.current_device.load(); diff --git a/vnt/src/handle/recv_data/server.rs b/vnt/src/handle/recv_data/server.rs index d384421..379cd8b 100644 --- a/vnt/src/handle/recv_data/server.rs +++ b/vnt/src/handle/recv_data/server.rs @@ -11,30 +11,30 @@ use protobuf::Message; use packet::icmp::{icmp, Kind}; use packet::ip::ipv4; use packet::ip::ipv4::packet::IpV4Packet; -use tun::Device; use tun::device::IFace; +use tun::Device; -use crate::channel::{Route, RouteKey}; use crate::channel::context::Context; +use crate::channel::{Route, RouteKey}; use crate::cipher::Cipher; #[cfg(feature = "server_encrypt")] use crate::cipher::RsaCipher; use crate::external_route::ExternalRoute; -use crate::handle::{ - BaseConfigInfo, ConnectStatus, CurrentDeviceInfo, GATEWAY_IP, PeerDeviceInfo, registrar, -}; use crate::handle::callback::{ErrorInfo, ErrorType, HandshakeInfo, RegisterInfo, VntCallback}; #[cfg(feature = "server_encrypt")] use crate::handle::handshaker; use crate::handle::handshaker::Handshake; use crate::handle::recv_data::PacketHandler; +use crate::handle::{ + registrar, BaseConfigInfo, ConnectStatus, CurrentDeviceInfo, PeerDeviceInfo, GATEWAY_IP, +}; use crate::nat::NatTest; use crate::proto; use crate::proto::message::{DeviceList, HandshakeResponse, RegistrationResponse}; -use crate::protocol::{ip_turn_packet, MAX_TTL, NetPacket, Protocol, service_packet, Version}; use crate::protocol::body::ENCRYPTION_RESERVED; use crate::protocol::control_packet::ControlPacket; use crate::protocol::error_packet::InErrorPacket; +use crate::protocol::{ip_turn_packet, service_packet, NetPacket, Protocol, Version, MAX_TTL}; /// 处理来源于服务端的包 #[derive(Clone)] @@ -136,14 +136,14 @@ impl PacketHandler for ServerPacketHandler { HandshakeResponse::parse_from_bytes(net_packet.payload()).map_err(|e| { io::Error::new(io::ErrorKind::Other, format!("HandshakeResponse {:?}", e)) })?; - log::info!("握手响应:{:?},{}",route_key, response); + log::info!("握手响应:{:?},{}", route_key, response); //如果开启了加密,则发送加密握手请求 #[cfg(feature = "server_encrypt")] if let Some(key) = self.server_cipher.key() { { let guard = self.rsa_cipher.lock(); - if let Some(rsa_cipher) = guard.as_ref(){ - if rsa_cipher.finger()==&response.key_finger{ + if let Some(rsa_cipher) = guard.as_ref() { + if rsa_cipher.finger() == &response.key_finger { let packet = handshaker::secret_handshake_request_packet( rsa_cipher, self.config_info.token.clone(), @@ -153,13 +153,21 @@ impl PacketHandler for ServerPacketHandler { context.send_by_key(packet.buffer(), route_key)?; return Ok(()); } - log::info!("服务端密钥对变化,原指纹:{:?},新指纹:{:?}", rsa_cipher.finger(),response.key_finger); + log::info!( + "服务端密钥对变化,原指纹:{:?},新指纹:{:?}", + rsa_cipher.finger(), + response.key_finger + ); } drop(guard); } let rsa_cipher = RsaCipher::new(&response.public_key)?; if rsa_cipher.finger() != &response.key_finger { - log::info!("服务端密钥和指纹不匹 配拒绝握手,指纹1:{:?},指纹2:{:?}", rsa_cipher.finger(),response.key_finger); + log::info!( + "服务端密钥和指纹不匹 配拒绝握手,指纹1:{:?},指纹2:{:?}", + rsa_cipher.finger(), + response.key_finger + ); return Ok(()); } let handshake_info = HandshakeInfo::new( @@ -180,7 +188,7 @@ impl PacketHandler for ServerPacketHandler { } return Ok(()); } - if let Ok(rsa_cipher) = RsaCipher::new(&response.public_key){ + if let Ok(rsa_cipher) = RsaCipher::new(&response.public_key) { self.rsa_cipher.lock().replace(rsa_cipher); } let handshake_info = HandshakeInfo::new_no_secret(response.version); @@ -358,7 +366,7 @@ impl ServerPacketHandler { self.set_device_info_list(response.device_info_list, response.epoch as _); } service_packet::Protocol::SecretHandshakeResponse => { - if context.is_default_route(route_key){ + if context.is_default_route(route_key) { log::info!("SecretHandshakeResponse"); //加密握手结束,发送注册数据 self.register(current_device, context)?; @@ -495,7 +503,7 @@ impl ServerPacketHandler { poll_device.first_set_ttl(MAX_TTL); poll_device.set_protocol(Protocol::Service); poll_device - .set_transport_protocol(service_packet::Protocol::PollDeviceList.into()); + .set_transport_protocol(service_packet::Protocol::PullDeviceList.into()); self.server_cipher.encrypt_ipv4(&mut poll_device)?; //发送到默认服务端即可 context.send_default(poll_device.buffer(), current_device.connect_server)?; diff --git a/vnt/src/protocol/control_packet.rs b/vnt/src/protocol/control_packet.rs index f2638d5..dbd1bd6 100644 --- a/vnt/src/protocol/control_packet.rs +++ b/vnt/src/protocol/control_packet.rs @@ -5,14 +5,20 @@ use std::{fmt, io}; pub enum Protocol { /// ping请求 /* - 0 1 2 3 - 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | time | echo | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + 0 15 31 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | time | echo | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ Ping, - /// 维持连接,内容同ping + /* + 0 15 31 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | time | echo | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ Pong, /// 打洞请求 PunchRequest, @@ -85,8 +91,8 @@ pub type PongPacket = PingPacket; impl> PingPacket { pub fn new(buffer: B) -> io::Result> { let len = buffer.as_ref().len(); - if len != 4 { - return Err(io::Error::new(io::ErrorKind::InvalidData, "len != 4")); + if len < 4 { + return Err(io::Error::new(io::ErrorKind::InvalidData, "len < 4")); } Ok(PingPacket { buffer }) } @@ -126,8 +132,8 @@ pub struct AddrPacket { impl> AddrPacket { pub fn new(buffer: B) -> io::Result> { let len = buffer.as_ref().len(); - if len != 6 { - return Err(io::Error::new(io::ErrorKind::InvalidData, "len != 6")); + if len < 6 { + return Err(io::Error::new(io::ErrorKind::InvalidData, "len < 6")); } Ok(AddrPacket { buffer }) } diff --git a/vnt/src/protocol/service_packet.rs b/vnt/src/protocol/service_packet.rs index cb21bd1..dd40f6c 100644 --- a/vnt/src/protocol/service_packet.rs +++ b/vnt/src/protocol/service_packet.rs @@ -5,7 +5,7 @@ pub enum Protocol { /// 注册响应 RegistrationResponse, /// 拉取设备列表 - PollDeviceList, + PullDeviceList, /// 推送设备列表 PushDeviceList, /// 和服务端握手 @@ -23,7 +23,7 @@ impl From for Protocol { match value { 1 => Self::RegistrationRequest, 2 => Self::RegistrationResponse, - 3 => Self::PollDeviceList, + 3 => Self::PullDeviceList, 4 => Self::PushDeviceList, 5 => Self::HandshakeRequest, 6 => Self::HandshakeResponse, @@ -40,7 +40,7 @@ impl Into for Protocol { match self { Self::RegistrationRequest => 1, Self::RegistrationResponse => 2, - Self::PollDeviceList => 3, + Self::PullDeviceList => 3, Self::PushDeviceList => 4, Self::HandshakeRequest => 5, Self::HandshakeResponse => 6,