feat(代理支持): 不通过协议类型解析SOCKS5服务器地址

This commit is contained in:
2026-01-22 21:34:30 +08:00
parent f32ac95f8b
commit 3c38fe23e8
2 changed files with 11 additions and 12 deletions
+1 -1
View File
@@ -52,7 +52,7 @@ func main() {
var err error var err error
if s5 != "" { if s5 != "" {
fmt.Printf("通过代理探测: %s\n", s5) fmt.Printf("通过代理探测: %s\n", s5)
conn, err = DialSocks5UDP(s5, network, to) conn, err = DialSocks5UDP(s5, to)
if err != nil { if err != nil {
fmt.Printf("连接代理失败: %v\n", err) fmt.Printf("连接代理失败: %v\n", err)
return return
+10 -11
View File
@@ -176,9 +176,9 @@ func (c *socks5PacketConn) SetWriteDeadline(t time.Time) error {
} }
// DialSocks5UDP 建立SOCKS5 UDP关联 // DialSocks5UDP 建立SOCKS5 UDP关联
// 入参: proxyAddr 代理服务器地址, network 网络协议(udp/udp4/udp6), timeout 超时时间 // 入参: proxyAddr 代理服务器地址, timeout 超时时间
// 返回: conn 数据包连接, err 连接错误 // 返回: conn 数据包连接, err 连接错误
func DialSocks5UDP(proxyAddr, network string, timeout time.Duration) (net.PacketConn, error) { func DialSocks5UDP(proxyAddr string, timeout time.Duration) (net.PacketConn, error) {
var host string var host string
if strings.Contains(proxyAddr, "://") { if strings.Contains(proxyAddr, "://") {
u, err := url.Parse(proxyAddr) u, err := url.Parse(proxyAddr)
@@ -189,14 +189,7 @@ func DialSocks5UDP(proxyAddr, network string, timeout time.Duration) (net.Packet
} else { } else {
host = proxyAddr host = proxyAddr
} }
tcpNetwork := "tcp" conn, err := net.DialTimeout("tcp", host, timeout)
switch network {
case "udp4":
tcpNetwork = "tcp4"
case "udp6":
tcpNetwork = "tcp6"
}
conn, err := net.DialTimeout(tcpNetwork, host, timeout)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -280,7 +273,13 @@ func DialSocks5UDP(proxyAddr, network string, timeout time.Duration) (net.Packet
} }
conn.SetDeadline(time.Time{}) conn.SetDeadline(time.Time{})
relayAddr := &net.UDPAddr{IP: relayIP, Port: relayPort} relayAddr := &net.UDPAddr{IP: relayIP, Port: relayPort}
lConn, err := net.ListenUDP(network, nil) listenNetwork := "udp"
if relayIP.To4() != nil {
listenNetwork = "udp4"
} else {
listenNetwork = "udp6"
}
lConn, err := net.ListenUDP(listenNetwork, nil)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, err return nil, err