mirror of
https://github.com/xiaoqidun/probe.git
synced 2026-01-29 04:58:46 +08:00
feat(协议支持): 更好的支持IPv6
This commit is contained in:
@@ -52,7 +52,7 @@ func main() {
|
||||
var err error
|
||||
if s5 != "" {
|
||||
fmt.Printf("通过代理探测: %s\n", s5)
|
||||
conn, err = DialSocks5UDP(s5)
|
||||
conn, err = DialSocks5UDP(s5, network)
|
||||
if err != nil {
|
||||
fmt.Printf("连接代理失败: %v\n", err)
|
||||
return
|
||||
|
||||
+12
-1
@@ -149,6 +149,14 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
|
||||
return res
|
||||
}
|
||||
res.MappedIP = mappedAddr1.String()
|
||||
if localAddr, ok := conn.LocalAddr().(*net.UDPAddr); ok {
|
||||
if localAddr.IP.Equal(mappedAddr1.IP) && localAddr.Port == mappedAddr1.Port {
|
||||
res.Type = NATOpen
|
||||
res.Mapping = MappingEndpointIndependent
|
||||
res.Filtering = FilteringEndpointIndependent
|
||||
return res
|
||||
}
|
||||
}
|
||||
var targetSTUN2 string
|
||||
if secondarySTUN != "" {
|
||||
targetSTUN2 = secondarySTUN
|
||||
@@ -160,7 +168,10 @@ func DetectNAT(conn net.PacketConn, primarySTUN, secondarySTUN, network string,
|
||||
host, port, _ := net.SplitHostPort(primarySTUN)
|
||||
ips, err := net.LookupIP(host)
|
||||
if err == nil && len(ips) > 1 {
|
||||
primaryIP, _ := net.ResolveIPAddr("ip", host)
|
||||
primaryIP, err := net.ResolveIPAddr("ip", host)
|
||||
if err != nil {
|
||||
return res
|
||||
}
|
||||
wantIPv4 := network == "udp4"
|
||||
wantIPv6 := network == "udp6"
|
||||
if network == "udp" {
|
||||
|
||||
+11
-4
@@ -180,9 +180,9 @@ func (c *socks5PacketConn) SetWriteDeadline(t time.Time) error {
|
||||
}
|
||||
|
||||
// DialSocks5UDP 建立SOCKS5 UDP关联
|
||||
// 入参: proxyAddr 代理服务器地址
|
||||
// 入参: proxyAddr 代理服务器地址, network 网络协议(udp/udp4/udp6)
|
||||
// 返回: conn 数据包连接, err 连接错误
|
||||
func DialSocks5UDP(proxyAddr string) (net.PacketConn, error) {
|
||||
func DialSocks5UDP(proxyAddr, network string) (net.PacketConn, error) {
|
||||
var host string
|
||||
if strings.Contains(proxyAddr, "://") {
|
||||
u, err := url.Parse(proxyAddr)
|
||||
@@ -193,7 +193,14 @@ func DialSocks5UDP(proxyAddr string) (net.PacketConn, error) {
|
||||
} else {
|
||||
host = proxyAddr
|
||||
}
|
||||
conn, err := net.DialTimeout("tcp", host, 5*time.Second)
|
||||
tcpNetwork := "tcp"
|
||||
switch network {
|
||||
case "udp4":
|
||||
tcpNetwork = "tcp4"
|
||||
case "udp6":
|
||||
tcpNetwork = "tcp6"
|
||||
}
|
||||
conn, err := net.DialTimeout(tcpNetwork, host, 5*time.Second)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -272,7 +279,7 @@ func DialSocks5UDP(proxyAddr string) (net.PacketConn, error) {
|
||||
}
|
||||
}
|
||||
relayAddr := &net.UDPAddr{IP: relayIP, Port: relayPort}
|
||||
lConn, err := net.ListenUDP("udp", nil)
|
||||
lConn, err := net.ListenUDP(network, nil)
|
||||
if err != nil {
|
||||
conn.Close()
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user