From 495c63813b471103f7f64d2aae4fb4954e1449ca Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Thu, 22 Jan 2026 23:30:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=AE=8C=E5=96=84=E9=80=BB=E8=BE=91):=20?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- probe_nat.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/probe_nat.go b/probe_nat.go index aca6b58..3a691ec 100644 --- a/probe_nat.go +++ b/probe_nat.go @@ -259,7 +259,18 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string, 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) { + var checkIP net.IP + var checkPort int + if sAddr, ok := dst.(*net.UDPAddr); ok { + checkIP = sAddr.IP + checkPort = sAddr.Port + } else if sAddr, ok := dst.(*SocksAddr); ok { + if ipAddr, err := net.ResolveIPAddr("ip", sAddr.Host); err == nil { + checkIP = ipAddr.IP + checkPort = sAddr.Port + } + } + if checkIP != nil && addrF1 != nil && checkIP.Equal(addrF1.IP) && addrF1.Port == checkPort { respF1 = nil } } @@ -270,7 +281,13 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string, 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 { + var checkPort int + if sAddr, ok := dst.(*net.UDPAddr); ok { + checkPort = sAddr.Port + } else if sAddr, ok := dst.(*SocksAddr); ok { + checkPort = sAddr.Port + } + if checkPort != 0 && addrF2 != nil && checkPort == addrF2.Port { respF2 = nil } }