先记结论

--socks5 / socks5:// 是 本地 DNS 解析(local resolve)。
--socks5-hostname / socks5h:// 是 代理端 DNS 解析(remote resolve),跨网络场景更常用。

curl 支持的 SOCKS 参数(完整)

$ curl --help all | grep socks
     --socks4 <host[:port]>                        SOCKS4 proxy on given host + port
     --socks4a <host[:port]>                       SOCKS4a proxy on given host + port
     --socks5 <host[:port]>                        SOCKS5 proxy on given host + port
     --socks5-basic                                Username/password auth for SOCKS5 proxies
     --socks5-gssapi                               Enable GSS-API auth for SOCKS5 proxies
     --socks5-gssapi-nec                           Compatibility with NEC SOCKS5 server
     --socks5-gssapi-service <name>                SOCKS5 proxy service name for GSS-API
     --socks5-hostname <host[:port]>               SOCKS5 proxy, pass hostname to proxy

本机版本与帮助信息确认(2026-04-14)

当前工作站(192.168.114.4)实测:

$ curl --version
curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.5.0 OpenSSL/3.0.13 ...
Release-Date: 2023-12-06, security patched: 8.5.0-2ubuntu10.6
Features: ... AsynchDNS ... GSS-API ... Kerberos ... IPv6 ... UnixSockets ...
$ curl --help all | grep socks
     --socks4 <host[:port]> SOCKS4 proxy on given host + port
     --socks4a <host[:port]> SOCKS4a proxy on given host + port
     --socks5 <host[:port]> SOCKS5 proxy on given host + port
     --socks5-basic Enable username/password auth for SOCKS5 proxies
     --socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
     --socks5-gssapi-nec Compatibility with NEC SOCKS5 server
     --socks5-gssapi-service <name> SOCKS5 proxy service name for GSS-API
     --socks5-hostname <host[:port]> SOCKS5 proxy, pass host name to proxy

确认结论(针对本机 curl 8.5.0):

  • SOCKS 相关参数齐全,--socks5-gssapi* 可用(Features 含 GSS-API)。
  • --socks5 与 --socks5-hostname 同时存在,建议优先记忆 socks5:// 与 socks5h:// 两种 URL 前缀写法。
  • AsynchDNS 已启用,DNS 解析行为仍以选项语义为准(socks5 本地解析,socks5h 代理端解析)。

补充(来自本机 curl --manual):

  • --socks5-hostname:let the proxy resolve the host name
  • --socks5:resolve the host name locally
  • --socks5(以及 --socks4)对 IPV6/FTPS/LDAP 有兼容性限制,跨协议场景建议优先验证。

基本 SOCKS5 代理命令

# 方式1:--socks5(本地解析DNS)
curl --socks5 127.0.0.1:1080 https://example.com

# 方式2:-x socks5://(等价于 --socks5)
curl -x socks5://127.0.0.1:1080 https://example.com

# SOCKS5 + 用户名密码认证
curl --socks5 127.0.0.1:1080 -U user:pass https://example.com

# 让代理端解析DNS(更常见)
curl --socks5-hostname 127.0.0.1:1080 https://example.com

# 等价写法(推荐记这个)
curl -x socks5h://127.0.0.1:1080 https://example.com

DNS 解析位置对比

选项 / 协议DNS 解析位置说明
--socks4 / socks4://本地旧协议,curl 先解析域名再把 IP 给代理
--socks4a / socks4a://代理端SOCKS4a 允许由代理解析域名
--socks5 / socks5://本地SOCKS5 连接,但域名由本机解析
--socks5-hostname / socks5h://代理端域名直接传给代理解析,最常用

为什么很多人推荐 socks5h://

在跨网络(如内网机器经代理访问外网)时,本地 DNS 往往不可达或污染,
让代理端解析域名通常更稳定,也更符合“流量与解析都走代理”的预期。

SOCKS5 认证相关参数

# 默认就是 basic(用户名/密码)认证
curl --socks5-basic --socks5 127.0.0.1:1080 -U user:pass https://example.com

# 使用 GSS-API 认证(需 curl 编译时支持)
curl --socks5-gssapi --socks5 127.0.0.1:1080 https://example.com

# 指定 GSS-API 服务名
curl --socks5-gssapi --socks5-gssapi-service sockd \
  --socks5 127.0.0.1:1080 https://example.com

# 对 NEC 兼容实现启用兼容模式(少见)
curl --socks5-gssapi-nec --socks5 127.0.0.1:1080 https://example.com

参数说明(简版):

  • --socks5-basic:用户名/密码认证(默认就是它)
  • --socks5-gssapi:启用 Kerberos/GSS-API 认证
  • --socks5-gssapi-nec:兼容 NEC SOCKS5 服务实现
  • --socks5-gssapi-service <name>:指定 GSS-API service name

与环境变量配合(避免每次写长命令)

# 全局代理(建议 socks5h,让代理端解析)
export ALL_PROXY=socks5h://127.0.0.1:1080
curl https://example.com

# 只排除内网地址
export NO_PROXY=localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8

速查表

# SOCKS5 + 本地DNS解析
curl --socks5 127.0.0.1:1080 https://example.com

# SOCKS5 + 代理端DNS解析(推荐)
curl --socks5-hostname 127.0.0.1:1080 https://example.com

# 等价推荐写法
curl -x socks5h://127.0.0.1:1080 https://example.com

# 带认证
curl -x socks5h://127.0.0.1:1080 -U username:password https://example.com

# 设置为环境变量,避免每次输入
export ALL_PROXY=socks5h://127.0.0.1:1080
curl https://example.com