From c070d345ad11cb015e577a328c5d2a7f16e0f58c Mon Sep 17 00:00:00 2001 From: asxalex Date: Mon, 30 Dec 2024 10:15:44 +0800 Subject: [PATCH] fix nat probe bug --- src/network/node.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/network/node.rs b/src/network/node.rs index e8fbdf8..dd7b861 100644 --- a/src/network/node.rs +++ b/src/network/node.rs @@ -400,22 +400,18 @@ impl Node { }; if reply1.ip == self.outer_ip_v4.load(Ordering::Relaxed) { - let Ok(reply2) = self - .send_and_wait_for_probe_reply(StunProbeAttr::None, &self.config.nat_server2) + let Ok(_reply2) = self + .send_and_wait_for_probe_reply(StunProbeAttr::Peer, &self.config.nat_server1) .await else { - *self.nat_type.lock().unwrap() = NatType::Blocked; - return NatType::Blocked; - }; - if reply1.ip != reply2.ip || reply1.port != reply2.port { *self.nat_type.lock().unwrap() = NatType::Symmetric; return NatType::Symmetric; - } + }; *self.nat_type.lock().unwrap() = NatType::NoNat; return NatType::NoNat; } - if let Ok(_reply3) = self + if let Ok(_reply2_2) = self .send_and_wait_for_probe_reply(StunProbeAttr::Peer, &self.config.nat_server1) .await { @@ -423,6 +419,18 @@ impl Node { return NatType::FullCone; } + let Ok(reply3) = self + .send_and_wait_for_probe_reply(StunProbeAttr::None, &self.config.nat_server2) + .await + else { + *self.nat_type.lock().unwrap() = NatType::Blocked; + return NatType::Blocked; + }; + if reply3.ip != reply1.ip || reply3.port != reply1.port { + *self.nat_type.lock().unwrap() = NatType::Symmetric; + return NatType::Symmetric; + } + if let Ok(_reply4) = self .send_and_wait_for_probe_reply(StunProbeAttr::Port, &self.config.nat_server1) .await