Browse Source

Fix socks4 client

世界 3 years ago
parent
commit
5a9913eca5
1 changed files with 11 additions and 2 deletions
  1. 11 2
      outbound/socks.go

+ 11 - 2
outbound/socks.go

@@ -20,8 +20,9 @@ var _ adapter.Outbound = (*Socks)(nil)
 
 
 type Socks struct {
 type Socks struct {
 	myOutboundAdapter
 	myOutboundAdapter
-	client *socks.Client
-	uot    bool
+	client  *socks.Client
+	resolve bool
+	uot     bool
 }
 }
 
 
 func NewSocks(router adapter.Router, logger log.ContextLogger, tag string, options option.SocksOutboundOptions) (*Socks, error) {
 func NewSocks(router adapter.Router, logger log.ContextLogger, tag string, options option.SocksOutboundOptions) (*Socks, error) {
@@ -45,6 +46,7 @@ func NewSocks(router adapter.Router, logger log.ContextLogger, tag string, optio
 			tag:      tag,
 			tag:      tag,
 		},
 		},
 		socks.NewClient(detour, options.ServerOptions.Build(), version, options.Username, options.Password),
 		socks.NewClient(detour, options.ServerOptions.Build(), version, options.Username, options.Password),
+		version == socks.Version4,
 		options.UoT,
 		options.UoT,
 	}, nil
 	}, nil
 }
 }
@@ -72,6 +74,13 @@ func (h *Socks) DialContext(ctx context.Context, network string, destination M.S
 	default:
 	default:
 		return nil, E.Extend(N.ErrUnknownNetwork, network)
 		return nil, E.Extend(N.ErrUnknownNetwork, network)
 	}
 	}
+	if destination.IsFqdn() {
+		addrs, err := h.router.LookupDefault(ctx, destination.Fqdn)
+		if err != nil {
+			return nil, err
+		}
+		return N.DialSerial(ctx, h.client, network, destination, addrs)
+	}
 	return h.client.DialContext(ctx, network, destination)
 	return h.client.DialContext(ctx, network, destination)
 }
 }