# SOCKS5 代理

SOCKS5 代理在传输层转发 TCP 连接，无需理解应用协议，因此可以承载 HTTP、HTTPS、SMTP、自定义二进制协议或任何其他基于 TCP 的内容。SOCKS5 增加了用户名密码身份验证，并可选择提供远程 DNS 解析和 UDP 关联。对于并非 HTTP 客户端的工具，或需要由代理解析主机名的工具，应当使用这种协议。


## SOCKS5 与 HTTP 代理对比

|  | SOCKS5 | HTTP 代理 |
| --- | --- | --- |
| 承载的协议 | 任何 TCP 协议 | HTTP 和 HTTPS（CONNECT 也能通过隧道承载其他 TCP 协议） |
| 是否理解请求 | 否 | 对于明文 HTTP 则是 |
| DNS 解析 | 在代理端（socks5h）或本地（socks5） | 完整 URL 请求由代理解析；主机名通过 CONNECT 发送 |
| 客户端支持 | 大多数工具；部分工具需要使用库 | 普遍支持 |


## socks5 与 socks5h 对比

在 cURL 和 Python 中，`socks5://` 会在本机解析目标主机名，并将 IP 发送给代理；`socks5h://` 会发送主机名，由出口进行解析。请使用 `socks5h`，让 DNS 查询保留在出口所在国家/地区，并避免向本地解析器泄露主机名。

```text
socks5h://USER-cc-us:PASS@res.proxshift.com:9001
```


## 在 ProxShift 中的工作方式

ProxShift 网关通过端口 9001 使用 SOCKS5，凭据和用户名参数与 HTTP 相同；专用地址使用端口 8001。不支持 UDP ASSOCIATE 和 BIND：仅支持 TCP。

## 问题

**SOCKS5 比 HTTP 更快吗？**

没有可衡量的速度差异。两者都会增加一跳；SOCKS5 的解析工作略少，但网络路径才是主要因素。应根据工具支持和 DNS 行为进行选择，而不是根据速度。

来源：https://proxshift.com/zh/glossary/socks5-proxy
