From be6cd187bbba42ae8592a0350758c3b54fb95c8c Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Thu, 22 Jan 2026 22:42:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- probe_nat.go | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6234093..e63cd5c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ probe -ip 6 probe -s5 127.0.0.1:54321 # 使用自定义服务器(STUN协议) -probe -s1 stun.miwifi.com:3478 +probe -s1 stun.voipia.net:3478 ``` # 授权协议 diff --git a/probe_nat.go b/probe_nat.go index 6d55786..aca6b58 100644 --- a/probe_nat.go +++ b/probe_nat.go @@ -256,11 +256,25 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string, } } } - respF1, _, _ := performTest(conn, primarySTUN, network, timeout, true, true) + respF1, addrF1, _ := performTest(conn, primarySTUN, network, timeout, true, true) + if respF1 != nil { + if dst, err := resolveAddr(conn, primarySTUN, network); err == nil { + if sAddr, ok := dst.(*net.UDPAddr); ok && addrF1 != nil && sAddr.IP.Equal(addrF1.IP) { + respF1 = nil + } + } + } if respF1 != nil { res.Filtering = FilteringEndpointIndependent } else { - respF2, _, _ := performTest(conn, primarySTUN, network, timeout, false, true) + respF2, addrF2, _ := performTest(conn, primarySTUN, network, timeout, false, true) + if respF2 != nil { + if dst, err := resolveAddr(conn, primarySTUN, network); err == nil { + if sAddr, ok := dst.(*net.UDPAddr); ok && addrF2 != nil && sAddr.Port == addrF2.Port { + respF2 = nil + } + } + } if respF2 != nil { res.Filtering = FilteringAddressDependent } else {