From 32b8a908dbc2927d12efd49ad80702681f63f533 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Thu, 22 Jan 2026 20:18:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E7=A1=AC?= =?UTF-8?q?=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- probe.go | 2 +- probe_nat.go | 4 ++-- probe_socks5.go | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/probe.go b/probe.go index 2604cdb..511f804 100644 --- a/probe.go +++ b/probe.go @@ -52,7 +52,7 @@ func main() { var err error if s5 != "" { fmt.Printf("通过代理探测: %s\n", s5) - conn, err = DialSocks5UDP(s5, network) + conn, err = DialSocks5UDP(s5, network, to) if err != nil { fmt.Printf("连接代理失败: %v\n", err) return diff --git a/probe_nat.go b/probe_nat.go index acd4c5e..788a43d 100644 --- a/probe_nat.go +++ b/probe_nat.go @@ -204,7 +204,7 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string, } if mappedAddr2 == nil { res.Mapping = MappingUnknown - } else if mappedAddr1.String() == mappedAddr2.String() { + } else if mappedAddr1.IP.Equal(mappedAddr2.IP) && mappedAddr1.Port == mappedAddr2.Port { res.Mapping = MappingEndpointIndependent } else { res.Mapping = MappingAddressPortDependent @@ -223,7 +223,7 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string, resp3, _, err := performTest(conn, altPortSTUN, network, timeout, false, false) if err == nil && resp3 != nil { if mappedAddr3 := resp3.GetMappedAddress(); mappedAddr3 != nil { - if mappedAddr1.String() == mappedAddr3.String() { + if mappedAddr1.IP.Equal(mappedAddr3.IP) && mappedAddr1.Port == mappedAddr3.Port { res.Mapping = MappingAddressDependent } } diff --git a/probe_socks5.go b/probe_socks5.go index 2adc61f..6c75d35 100644 --- a/probe_socks5.go +++ b/probe_socks5.go @@ -180,9 +180,9 @@ func (c *socks5PacketConn) SetWriteDeadline(t time.Time) error { } // DialSocks5UDP 建立SOCKS5 UDP关联 -// 入参: proxyAddr 代理服务器地址, network 网络协议(udp/udp4/udp6) +// 入参: proxyAddr 代理服务器地址, network 网络协议(udp/udp4/udp6), timeout 超时时间 // 返回: conn 数据包连接, err 连接错误 -func DialSocks5UDP(proxyAddr, network string) (net.PacketConn, error) { +func DialSocks5UDP(proxyAddr, network string, timeout time.Duration) (net.PacketConn, error) { var host string if strings.Contains(proxyAddr, "://") { u, err := url.Parse(proxyAddr) @@ -200,7 +200,7 @@ func DialSocks5UDP(proxyAddr, network string) (net.PacketConn, error) { case "udp6": tcpNetwork = "tcp6" } - conn, err := net.DialTimeout(tcpNetwork, host, 5*time.Second) + conn, err := net.DialTimeout(tcpNetwork, host, timeout) if err != nil { return nil, err }