SOCKS5代理服务器搭建指南

实现真实SOCKS5连接验证的后端服务

为什么需要后端服务?

由于浏览器安全限制,前端JavaScript无法直接建立SOCKS5连接。我们需要一个Node.js后端服务作为中间层,接收前端请求并通过SOCKS5协议验证代理线路。

⚠️ 如果您看到"Cannot GET /"错误,说明后端服务已启动但未正确处理根路径请求,这属于正常现象,不影响API接口功能。

环境准备

  1. 安装 Node.js (建议使用LTS版本)
  2. 准备一个可访问的服务器或本地开发环境
  3. 确保服务器防火墙开放了代理服务端口(默认3000)

搭建步骤

1. 创建项目

mkdir socks5-proxy-server
cd socks5-proxy-server
npm init -y

2. 安装依赖

npm install express http-proxy socks-proxy-agent axios cors

3. 创建server.js

const express = require('express');
const { SocksProxyAgent } = require('socks-proxy-agent');
const axios = require('axios');
const cors = require('cors');

const app = express();
app.use(cors());
app.use(express.json());

// 健康检查端点
app.get('/health', (req, res) => {
  res.json({ status: 'ok' });
});

// SOCKS5验证端点
app.post('/api/validate-socks5', async (req, res) => {
  const { ip, port, username, password, testUrl = 'http://www.example.com' } = req.body;

  try {
    // 构建SOCKS5代理配置
    let proxyOptions = `socks5://${ip}:${port}`;
    if (username && password) {
      proxyOptions = `socks5://${username}:${password}@${ip}:${port}`;
    }

    // 创建代理agent
    const agent = new SocksProxyAgent(proxyOptions);

    // 测试连接
    const startTime = Date.now();
    const response = await axios.get(testUrl, {
      httpAgent: agent,
      httpsAgent: agent,
      timeout: 10000
    });
    const ping = Date.now() - startTime;

    // 获取IP信息
    const ipInfo = await axios.get(`https://ipapi.co/${ip}/json/`);

    res.json({
      success: true,
      ping,
      location: `${ipInfo.data.country_name || '未知'}, ${ipInfo.data.city || '未知'}`,
      isp: ipInfo.data.org || '未知'
    });
  } catch (error) {
    res.json({
      success: false,
      error: error.message
    });
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

4. 启动服务

node server.js

服务启动后,可以通过以下命令测试:

curl -X POST http://localhost:3000/api/validate-socks5 \
-H "Content-Type: application/json" \
-d '{"ip":"代理IP","port":"代理端口","username":"用户名","password":"密码"}'

常见问题排查

1. 服务启动但无法访问

  • 检查服务器防火墙是否开放3000端口
  • 测试本地访问:curl http://localhost:3000/health
  • 如果是云服务器,检查安全组规则

2. 前端显示后端未连接

  • 确认后端服务URL正确(前端代码中的proxyServerUrl)
  • 检查是否有跨域问题,后端已配置CORS
  • 测试API接口:curl -X POST http://后端地址/api/validate-socks5

3. 验证超时或失败

  • 检查代理IP和端口是否正确
  • 确认代理服务器是否正常运行
  • 尝试更换测试URL(修改server.js中的testUrl)

前端配置

在前端验证工具中,将代理服务URL设置为:

const proxyServerUrl = 'http://你的服务器IP:3000/api/validate-socks5';

如果服务部署在本地开发环境,可以使用:

const proxyServerUrl = 'http://localhost:3000/api/validate-socks5';

⚠️ 注意:前端和后端必须在同一域名下或配置CORS,否则会出现跨域问题。