【代理】實現的方式


一般來講,如果我們有一台需要做為代理的伺服器,我們可以自己寫代碼來實現。

如:nodejs

1. 建立一個代理伺服器

先建立一個代理伺服器,並且使用 TCP 協議來進行基本的數據轉發。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const net = require('net');

// 設置代理伺服器的端口
const proxyPort = 1080;

// 目標伺服器的 IP 和端口
const targetServerHost = 'example.com'; // 你的目標伺服器地址
const targetServerPort = 80; // 目標伺服器端口,HTTP 默認是 80

// 創建代理伺服器
const proxyServer = net.createServer((clientSocket) => {
console.log('新的客戶端連接!');

// 與目標伺服器建立連接
const targetSocket = net.createConnection(targetServerPort, targetServerHost, () => {
console.log('已經連接到目標伺服器');

// 轉發客戶端數據到目標伺服器
clientSocket.pipe(targetSocket);

// 轉發目標伺服器數據到客戶端
targetSocket.pipe(clientSocket);
});

// 錯誤處理
targetSocket.on('error', (err) => {
console.log('目標伺服器錯誤:', err);
clientSocket.destroy();
});

clientSocket.on('error', (err) => {
console.log('客戶端錯誤:', err);
targetSocket.destroy();
});
});

// 啟動代理伺服器
proxyServer.listen(proxyPort, () => {
console.log(`代理伺服器運行在端口 ${proxyPort}`);
});

2. 確保遠端伺服器的端口開放

假設你的遠端伺服器上的 Node.js 代理服務運行在 **0.0.0.0:1080**,你需要確保這個端口對外是開放的。這樣,你可以從你的本地設備發送請求到這個端口。

比如我使用的是 Linux,可以檢查是否開放了端口,使用以下命令:

1
sudo ufw allow 1080/tcp # 檢查1080端口防火牆是否允許通行

對與小白來講,其實完整的步驟應該是這樣的吖吖:

步驟 1:檢查 ufw 狀態

首先,檢查你的 ufw 是否已經啟動。你可以使用以下命令來查看狀態:

1
sudo ufw status

如果顯示 inactive,那麼你需要先啟動 ufw

步驟 2:啟用 ufw(如果尚未啟用)

如果 ufw 目前處於關閉狀態,可以使用以下命令啟動它:

1
sudo ufw enable

步驟 3:允許端口

假設你要允許 1080 端口,你可以使用以下命令:

1
sudo ufw allow 1080/tcp

這條命令會允許 TCP 流量通過 1080 端口。

步驟 4:檢查防火牆規則

設置完後,你可以再次查看 ufw 的狀態,確保端口已經被允許:

1
sudo ufw status

應該會顯示像這樣的結果,表示 1080 端口已經允許:

1
2
3
To                         Action      From
-- ------ ----
1080/tcp ALLOW Anywhere

步驟 5:關閉防火牆(可選)

如果你覺得麻煩,其實直接不需要上面做咁多,可以使用這個命令:

1
sudo ufw disable

這樣,端口 1080 就已經被允許了,你可以開始使用它來接收外部流量。

步驟 6:

如果你使用的是 云服務提供商,還需要確保安全組或防火牆規則允許端口 1080 的進入流量。

例如,我的設置:

3. 在本地機器設置代理

假設你的遠端伺服器 IP 是 **123.123.123.123**,且代理端口是 1080,你現在需要在本地機器設置代理,讓本地的網絡流量都經過這個遠端的代理服務器。

你可以按照以下方式設置:

使用 cURL 測試遠端代理服務:

使用 cURL 在服務器端測試遠端代理服務:

1
curl -x socks5://127.0.0.1:1080 https://www.google.com

使用 cURL 在本地測試遠端代理服務:

1
curl -x socks5://123.123.123.123:1080 https://www.google.com
  • **-x socks5://123.123.123.123:1080**:這告訴 cURL 使用遠端伺服器(123.123.123.123:1080`)作為代理進行請求。

  • 其實一般來講呢,socks協議是要設置用戶名密碼的吖,命令:

    1
    curl -v -x socks5h://123.123.123.123:1080 -U username:password https://www.google.com
    • -x socks5h://123.123.123.123:1080 指定 SOCKS5 代理地址和端口。
    • -U username:password 提供了代理认证所需的用户名和密码。

    不過我這裏沒有設置。

Chrome 設置代理:

如果你想在瀏覽器中使用這個代理,則需要配置 Chrome 使其通過遠端的代理伺服器來訪問網站。

  1. 打開 Chrome。
  2. 點擊右上角的三個點,選擇 設置
  3. 滾動到底部,選擇 進階
  4. 系統 部分,點擊 打開代理設置
  5. Internet 屬性 中,選擇 連接 頁面,然後點擊 局域網設置
  6. 在局域網設置中,勾選 使用代理伺服器,並設置 地址123.123.123.123端口 設為 1080
  7. 保存設置後,Chrome 就會通過遠端代理伺服器來訪問 目標網站。