mirror of
https://github.com/xiaoqidun/probe.git
synced 2026-01-29 04:58:46 +08:00
feat(代理支持): 不通过协议类型解析SOCKS5服务器地址
This commit is contained in:
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user