# Proxy SOCKS5: giao thức và cách sử dụng | ProxyJam

SOCKS5 là gì, khác proxy HTTP ra sao, khi nào DNS phía xa quan trọng, và cách chuyển một proxy ISP tĩnh của ProxyJam sang SOCKS5 rồi kết nối bằng cổng và thông tin đăng nhập mà đơn hàng hiển thị sau đó.

- Canonical: https://proxyjam.com/vi/socks5-proxies/
- Updated: 2026-10-23
- Language: vi

SOCKS5 là một giao thức proxy ở tầng giao vận: nó mở một kết nối thay cho bạn và chuyển các byte đi, không đọc hay viết lại những gì bên trong. Mọi proxy ISP tĩnh chúng tôi bán đều có thể chuyển giữa HTTP và SOCKS5 trên chính đơn hàng bạn đang giữ.

Chuyển giao thức không phải là một sản phẩm khác: bạn chuyển chính proxy bạn đang giữ, từ bảng điều khiển hoặc qua API, và đơn hàng được cập nhật với cổng và thông tin đăng nhập mới để kết nối.


SOCKS5 là một giao thức proxy, không phải một loại địa chỉ: nó chuyển tiếp một kết nối TCP mà không đọc hay viết lại những gì bên trong. Mọi proxy dân cư tĩnh (ISP) mà ProxyJam bán đều chạy HTTP, vốn mang được HTTPS, hoặc SOCKS5, và bạn chuyển giữa hai giao thức trên chính đơn hàng bạn đang giữ; sau khi chuyển, hãy kết nối bằng cổng và thông tin đăng nhập mà đơn hàng hiển thị.


## Điều gì diễn ra giữa client của bạn và proxy của chúng tôi

Ba lượt trao đổi ngắn, không lượt nào cần proxy hiểu lưu lượng của bạn.

1. **Client của bạn chào proxy và thống nhất cách xác thực.** Nó đưa ra các phương thức nó hỗ trợ; proxy chọn phương thức nó muốn. Trên các địa chỉ của chúng tôi, đó là tên đăng nhập và mật khẩu, hoặc không cần gì cả nếu thay vào đó bạn đã đưa IP của chính mình vào danh sách cho phép.
2. **Client của bạn yêu cầu một đích đến.** Một host và một cổng, gửi dưới dạng địa chỉ hoặc dưới dạng tên. Gửi tên là trường hợp đáng chú ý: proxy phân giải nó, nên lượt tra cứu đi ra từ mạng của proxy chứ không phải từ mạng của bạn.
3. **Sau đó proxy chỉ chuyển các byte.** Nó không phân tích nội dung, không thêm header và không biết mình đang mang một trang web, một phiên cơ sở dữ liệu hay một lượt chuyển thư. Chính sự không quan tâm đó là toàn bộ lý do để chọn SOCKS5 thay vì một proxy HTTP.

## Để quyết định trỏ client tới giao thức nào

### Nhà phát triển

Trỏ client tới giao thức nào, và scheme socks5 hay socks5h cần đặt trong đó sau khi proxy đã được chuyển.

### Người vận hành

Trỏ client tới giao thức nào, và cách chuyển proxy bạn đang giữ từ bảng điều khiển hoặc qua API.


## Chuyển một proxy ProxyJam sang SOCKS5

1. **Chuyển chính proxy** Từ bảng điều khiển hoặc bằng một lời gọi API trên đơn hàng; chỉ thay đổi client là không đủ. Proxy có thể tạm thời không dùng được trong lúc chuyển.
2. **Sao chép cổng, tên đăng nhập và mật khẩu mà đơn hàng hiển thị sau khi chuyển** Đừng dùng lại các giá trị bạn đã dùng để kết nối qua HTTP.
3. **Đặt scheme trong client của bạn** `socks5h://USERNAME:PASSWORD@HOST:PORT` để proxy phân giải tên host, hoặc `socks5://` để phân giải chúng ở phía bạn.
4. **Thử từ terminal trước khi động vào code** `curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/`.
5. **Cài phần mở rộng SOCKS trong Python** Trong Python, requests cần phần mở rộng SOCKS của nó, `pip install requests[socks]`, trước khi một URL proxy `socks5h://` hoạt động.

## Kết nối trước, rồi đổi scheme

Các mẫu dưới đây kết nối qua HTTP, giao thức mà một đơn hàng dùng lúc bắt đầu. Để dùng SOCKS5, trước hết hãy chuyển chính proxy, từ bảng điều khiển hoặc bằng một lời gọi API; khi đó đơn hàng hiển thị cổng và thông tin đăng nhập để dùng từ nay về sau. Trong client, đổi scheme thành socks5, hoặc socks5h nếu bạn muốn proxy phân giải tên host, với cổng và thông tin đăng nhập đó. Python cần requests[socks] cho việc này, còn Node.js cần một SOCKS agent thay cho HTTPS agent.

### Python

Định tuyến một request qua proxy của bạn bằng Python requests.

```
import requests

# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"

proxies = {
    "http": proxy,
    "https": proxy,
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
)

print(response.status_code)
```

### cURL

Một lệnh để gửi request qua proxy của bạn.

```
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
curl -x http://USERNAME:PASSWORD@HOST:PORT \
     https://example.com/
```

### Node.js

Định tuyến axios qua proxy của bạn trong vài dòng.

```
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
const proxy = "http://USERNAME:PASSWORD@HOST:PORT";
const agent = new HttpsProxyAgent(proxy);

const response = await axios.get(
  "https://example.com/",
  {
    httpAgent: agent,
    httpsAgent: agent,
  },
);

console.log(response.status);
```

### Go

Cấu hình http.Transport với proxy của bạn và gửi một request.

```
package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    // HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
    proxy, _ := url.Parse(
        "http://USERNAME:PASSWORD@HOST:PORT")

    client := &http.Client{Transport: &http.Transport{
        Proxy: http.ProxyURL(proxy),
    }}

    res, _ := client.Get("https://example.com/")
    fmt.Println(res.Status)
}
```


## SOCKS5 và proxy HTTP: mỗi loại mang được gì, và proxy thấy được gì

|  | Proxy HTTP | HTTPS qua CONNECT | SOCKS5 |
|---|---|---|---|
| Mang được gì | Chỉ các request HTTP | Một đường hầm TCP tới host và cổng được nêu | Bất kỳ luồng TCP nào |
| Proxy có đọc nội dung không | Có: nó phân tích request | Không, sau khi đường hầm đã mở | Không, ở bất kỳ thời điểm nào |
| Nó có thể thay đổi header của bạn không | Có: nó chuyển tiếp chúng và có thể thêm header của riêng nó, chẳng hạn Via | Không, sau khi đường hầm đã mở | Không: nó không có khái niệm header |
| Tên host được phân giải ở đâu | Tại proxy | Tại proxy, vì CONNECT nêu tên host | Tùy bạn chọn, ở một trong hai đầu |
| Mức hỗ trợ thường thấy ở client | Có trong mọi công cụ HTTP | Có trong mọi công cụ HTTP | Phổ biến trong công cụ dòng lệnh; một số thư viện cần thêm một gói |
| Phù hợp nhất cho | Các request web đơn giản | Duyệt web HTTPS và scraping thông thường | Các giao thức không phải web và lưu lượng hỗn hợp |

Một proxy ProxyJam chạy HTTP, vốn mang được HTTPS qua CONNECT, hoặc SOCKS5, chuyển đổi trên đơn hàng. Lựa chọn phụ thuộc vào những gì client của bạn cần gửi.


## SOCKS5 mang lại gì trên các địa chỉ của chúng tôi

- **Giao thức:** SOCKS5 hoặc HTTP (vốn mang được HTTPS), chuyển đổi trên đơn hàng
- **Xác thực:** Tên đăng nhập và mật khẩu, hoặc danh sách IP cho phép
- **Địa chỉ mà mục tiêu thấy:** Một địa chỉ ISP tĩnh trên mạng của một nhà mạng có tên
- **Chọn nhà mạng:** 19 nhà mạng có tên tại Hoa Kỳ; danh sách ngắn hơn ở những nơi khác
- **Phạm vi:** 77 quốc gia trong danh mục, mỗi quốc gia đều nêu tên nhà mạng
- **Xoay vòng:** Không có: địa chỉ không thay đổi trong suốt kỳ hạn
- **Số phiên đồng thời:** 100 phiên mỗi proxy, 10 phiên khi vượt quá 50 GB trong một tháng
- **Cách tính lưu lượng:** Theo IP mỗi kỳ hạn; lượng truyền tải không bị đo trên bất kỳ giao thức nào

## Câu hỏi về SOCKS5

Các câu trả lời dưới đây nêu những điều khoản chúng tôi bán hàng theo, và mỗi câu trả lời có nêu điều khoản đều liên kết đến văn bản ràng buộc chúng tôi với điều khoản đó.

### Proxy SOCKS5 là gì?

SOCKS5 là một giao thức proxy được định nghĩa trong RFC 1928, hoạt động ở tầng giao vận. Client của bạn yêu cầu proxy mở một kết nối tới một host và một cổng, proxy mở nó, và từ đó trở đi nó chuyển tiếp các byte theo cả hai chiều mà không diễn giải chúng. Vì nó không bao giờ phân tích những gì nó đang mang, nó không bị giới hạn ở lưu lượng web: bất cứ thứ gì chạy trên TCP đều có thể đi qua nó.

### Nó khác proxy HTTP thế nào?

Một proxy HTTP hiểu HTTP. Nó đọc dòng request và các header, và nó được tự do thêm, bỏ hoặc viết lại chúng, đó là lý do một số proxy lặng lẽ tự khai báo mình trong một header mà bạn không đặt. SOCKS5 hoàn toàn không có khái niệm header: nó thấy một đích đến và một luồng byte. Nếu lưu lượng của bạn không phải HTTP, hoặc bạn muốn không có gì ở giữa có thể chỉnh sửa nó, SOCKS5 là lựa chọn nên dùng.

### SOCKS5 có mã hóa lưu lượng của tôi không?

Không, và proxy HTTP cũng vậy. SOCKS5 xác thực bạn với proxy rồi chuyển tiếp các byte. Đặc tả cho phép một phương thức xác thực tự thêm cơ chế bảo vệ của nó, nhưng xác thực bằng tên đăng nhập và mật khẩu (RFC 1929) gửi mật khẩu dưới dạng văn bản thuần và không bảo vệ gì sau đó. Nếu lưu lượng bên trong là HTTPS hay SSH thì nó đã được mã hóa đầu cuối, và proxy không thể đọc nó. Nếu lưu lượng bên trong là văn bản thuần, nó vẫn là văn bản thuần, vì vậy đừng coi SOCKS5 là một lớp mã hóa.

### socks5h làm được gì mà socks5 không làm?

Nó dời lượt tra cứu DNS. Với socks5, client của bạn phân giải tên host tại máy và yêu cầu proxy kết nối tới địa chỉ thu được. Với socks5h, client của bạn gửi tên và proxy phân giải nó. Điều đó quan trọng theo hai cách: resolver của chính bạn không bao giờ thấy bạn đang truy cập những host nào, và bạn nhận được câu trả lời mà mạng của proxy nhận được, mà với một tên host thay đổi theo địa lý thì thường không phải là câu trả lời bạn nhận được ở nhà.

### Nó có hỗ trợ UDP không?

UDP ASSOCIATE có trong RFC 1928; một client hay một máy chủ cụ thể có triển khai nó hay không thì tùy, nên hãy kiểm tra cả hai đầu thay vì mặc định là có. Chúng tôi chưa công bố hỗ trợ UDP cho các proxy của mình, nên hãy lên kế hoạch với TCP, và hỏi bộ phận hỗ trợ trước khi xây dựng bất cứ thứ gì phụ thuộc vào UDP.

### Tôi có cần một proxy khác để dùng SOCKS5 không?

Không. Bạn chuyển chính proxy bạn đang giữ giữa HTTP, vốn cũng mang được HTTPS, và SOCKS5, từ bảng điều khiển hoặc bằng một lời gọi API trên cùng đơn hàng. Đó không chỉ là một thiết lập ở client: việc chuyển được thực hiện trên proxy, đơn hàng được cập nhật với giao thức, cổng và thông tin đăng nhập mới, và proxy có thể tạm thời không dùng được trong lúc chuyển. Proxy vẫn là của bạn trong suốt kỳ hạn bạn đã trả tiền, được thay miễn phí nếu nó ngừng phản hồi hoặc bị chặn trên một mục tiêu bạn đã nêu, tối đa 20 % đơn hàng mỗi tháng dương lịch, và đơn hàng đầu tiên đi kèm quyền hoàn tiền trong 24 giờ cho tối đa 10 IP mà việc thử nghiệm không làm mất.


## HTTP hay SOCKS5?

Hãy giữ HTTP khi tất cả những gì bạn gửi là lưu lượng web và công cụ của bạn đã hỗ trợ proxy HTTP. Chuyển sang SOCKS5 khi một client phải mang thứ gì đó không phải HTTP, hoặc khi bạn muốn tên host được phân giải tại proxy và không có gì ở giữa có thể chỉnh sửa header của bạn. Dù thế nào thì đó cũng là cùng một sản phẩm, đặt mua trên trang [proxy ISP](/vi/isp-proxies/) và cũng được mô tả là [proxy dân cư tĩnh](/vi/static-residential-proxies/), không có đơn hàng riêng và không mất phí khi chuyển. Các câu hỏi về cài đặt được trả lời trong [FAQ](/vi/faq/). Số nhà mạng và số quốc gia trên trang này được đọc từ bản chụp danh mục mà trang web được dựng từ đó, như [chính sách biên tập](/vi/editorial-policy/) của chúng tôi mô tả.



## Nguồn

- [RFC 1928, SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928): đặc tả năm 1996, gồm thương lượng xác thực, các lệnh CONNECT, BIND và UDP ASSOCIATE, và đích đến được nêu bằng tên miền hoặc địa chỉ IPv6
- [RFC 1929, Username/Password Authentication for SOCKS V5](https://www.rfc-editor.org/rfc/rfc1929): phương thức đăng nhập, gửi mật khẩu dưới dạng văn bản thuần
- [RFC 9110, HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110): mục 9.3.6, một request CONNECT nêu host và cổng đích, và proxy mở đường hầm tới đó
- [curl man page](https://curl.se/docs/manpage.html): `--socks5` phân giải tên host tại máy, `--socks5-hostname` để proxy phân giải nó
- [Everything curl, SOCKS proxy](https://everything.curl.dev/usingcurl/proxies/socks.html): `socks5://` và `socks5h://` trong một URL proxy, và đầu nào phân giải tên host
- [OpenBSD manual, ssh(1)](https://man.openbsd.org/ssh): `-D` thiết lập chuyển tiếp cổng động tại máy, với ssh đóng vai trò máy chủ SOCKS4 và SOCKS5, và `-N` chuyển tiếp cổng mà không chạy lệnh từ xa




SOCKS5 mang được bất cứ thứ gì mà client của bạn có thể mở một kết nối TCP cho nó, kể cả lưu lượng mà một proxy HTTP không chuyển tiếp được, và nó cho các byte đi qua nguyên vẹn. Điều đó khiến nó là lựa chọn tự nhiên cho một client cơ sở dữ liệu, một phiên SSH, hay bất kỳ công cụ nào không dùng HTTP. Điều nó không làm là thay đổi bản chất của địa chỉ. Giao thức proxy được dùng giữa client của bạn và proxy; trang web ở đầu bên kia thấy một kết nối từ địa chỉ của proxy, cộng với bất kỳ header nào mà một proxy HTTP chọn thêm vào. Vì vậy, câu hỏi đáng đặt ra không phải là nên mua giao thức nào. Câu hỏi là địa chỉ thuộc về mạng nào, và ở đây câu trả lời là một nhà cung cấp internet có tên, với 19 nhà cung cấp tại Hoa Kỳ.

## Các đặc tả nói gì

SOCKS phiên bản 5 được công bố năm 1996 dưới dạng [RFC 1928](https://www.rfc-editor.org/rfc/rfc1928), một giao thức vượt tường lửa mở rộng SOCKS phiên bản 4 với UDP, một khung cho các phương thức xác thực, và đích đến được nêu bằng tên miền hoặc địa chỉ IPv6. Client đưa ra các phương thức xác thực nó hỗ trợ và máy chủ chọn một; sau đó client yêu cầu một kết nối đi ra (CONNECT), một cổng lắng nghe (BIND) hoặc một bộ chuyển tiếp UDP (UDP ASSOCIATE). Đăng nhập bằng tên đăng nhập và mật khẩu có đặc tả ngắn riêng, [RFC 1929](https://www.rfc-editor.org/rfc/rfc1929), vốn gửi mật khẩu dưới dạng văn bản thuần, nên hãy giữ lưu lượng bên trong đường hầm được mã hóa ở những nơi điều đó quan trọng.

Chọn giữa hai scheme socks5 và socks5h chính là chọn có dùng tùy chọn tên miền này hay không. [Hướng dẫn sử dụng của curl](https://curl.se/docs/manpage.html) mô tả `--socks5` là dùng proxy "but resolve the hostname locally" (nhưng phân giải tên host tại máy), và `--socks5-hostname` là biến thể để "the proxy resolve the hostname" (proxy phân giải tên host). Trong một URL proxy, `socks5://` cho cách thứ nhất và `socks5h://` cho cách thứ hai, như bảng trong [Everything curl](https://everything.curl.dev/usingcurl/proxies/socks.html) trình bày. Một proxy HTTP mang HTTPS thường nhận tên thay vì địa chỉ: một request CONNECT nêu host và cổng đích, và proxy mở đường hầm tới đó ([RFC 9110](https://www.rfc-editor.org/rfc/rfc9110), mục 9.3.6). Bộ chuyển tiếp UDP là một phần của đặc tả SOCKS5, nhưng các bản triển khai khác nhau ở điểm này; phần FAQ bên dưới cho biết điều đó có nghĩa gì với các proxy của chúng tôi.

## Dùng SOCKS5 qua SSH

Nếu bạn đã có quyền đăng nhập SSH vào một máy chủ, bạn đã có một proxy SOCKS5 mà không cần mua. `ssh -N -D 1080 user@server` thiết lập thứ mà [hướng dẫn ssh của OpenBSD](https://man.openbsd.org/ssh) gọi là chuyển tiếp cổng "dynamic" (động) ở tầng ứng dụng tại máy: ssh lắng nghe trên cổng 1080 ở máy của bạn và "will act as a SOCKS server" (sẽ đóng vai trò máy chủ SOCKS), mang từng kết nối qua kênh SSH được mã hóa và mở nó từ máy ở xa. `-N` giới hạn nó ở việc chuyển tiếp, không có shell từ xa. Trỏ một client tới `socks5h://127.0.0.1:1080` và lưu lượng của nó sẽ đi ra từ máy chủ.

Khác biệt so với một proxy SOCKS5 đã mua là nơi kết nối đi ra. Qua một đường hầm SSH, trang web ở đầu bên kia thấy địa chỉ của máy chủ SSH và mạng mà máy chủ đó thuộc về, mà với một máy chủ thuê thì thường là mạng của một công ty hosting. SSH mã hóa chặng giữa bạn và máy chủ; từ máy chủ tới trang web, lưu lượng vẫn giữ nguyên dạng vốn có của nó. Một proxy ProxyJam đã chuyển sang SOCKS5 đi ra từ một địa chỉ trên mạng của một nhà cung cấp internet có tên, được chọn theo quốc gia và nhà mạng khi thanh toán, và bạn kết nối trực tiếp tới nó bằng cổng và thông tin đăng nhập trên đơn hàng, không có SSH ở giữa và không cần tự vận hành máy chủ nào.

Vì vậy, hai cách này trả lời hai câu hỏi khác nhau. Một đường hầm qua SSH đưa lưu lượng ra khỏi một máy bạn đã kiểm soát. Một proxy SOCKS5 trên địa chỉ ISP dành cho công việc mà bản thân địa chỉ đi ra là điều quan trọng, tức là một lượt tra cứu địa chỉ đó cho thấy mạng nào.

