You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Tor的.onion链接与SOCKS代理实现Socket.IO跨服务器通信?

嘿,这个需求我刚好折腾过,完全可以实现!你有两个方向可选:要么复用你已经创建好的net socket,要么直接让socket.io通过Tor SOCKS代理连接到.onion地址。咱们一个个说:

方法一:复用已有的Net Socket

socket.io客户端支持传入自定义的WebSocket实例,而这个WebSocket可以基于你已经建立好的net socket来创建。具体步骤如下:

  1. 用你已有的net socket创建一个ws库的WebSocket实例(socket.io依赖ws库)
  2. 初始化socket.io客户端时,指定使用这个自定义的WebSocket

代码示例:

const io = require('socket.io-client');
const WebSocket = require('ws');

// 假设你已经通过Tor SOCKS代理建立了连接到.onion服务器的net socket
const netSocket = ...; // 你的已连接TCP socket实例

// 基于现有net socket创建WebSocket,注意要禁用自动连接
const customWs = new WebSocket('ws://your-onion-address.onion:3000', {
  socket: netSocket,
  autoConnect: false
});

// 初始化socket.io客户端,复用这个WebSocket
const socket = io('ws://your-onion-address.onion:3000', {
  transports: ['websocket'], // 强制只用WebSocket,避免长轮询的代理兼容性问题
  transportOptions: {
    websocket: {
      client: customWs
    }
  }
});

// 监听连接成功事件
socket.on('connect', () => {
  console.log('成功通过复用的socket连接到.onion服务器');
});
方法二:直接配置socket.io使用Tor SOCKS代理(更推荐)

如果你不需要手动管理net socket,直接让socket.io通过Tor代理连接会更简单。这里可以用socks-proxy-agent库来处理SOCKS代理,所有流量都会自动走Tor:

代码示例:

const io = require('socket.io-client');
const { SocksProxyAgent } = require('socks-proxy-agent');

// Tor SOCKS代理的地址,默认Tor服务端口是9050,Tor Browser是9150
const torProxyUrl = 'socks://localhost:9050';
const torAgent = new SocksProxyAgent(torProxyUrl);

// 初始化socket.io客户端,指定代理和.onion地址
const socket = io('ws://your-onion-address.onion:3000', {
  transports: ['websocket'],
  agent: torAgent, // 让所有WebSocket流量走Tor代理
});

socket.on('connect', () => {
  console.log('通过Tor SOCKS代理成功连接到.onion服务器');
});

一些关键注意事项

  • 确保Tor服务正在运行,并且代理端口正确(默认系统Tor是9050,Tor Browser是9150)
  • 服务器端需要配置Tor隐藏服务:在torrc文件中添加类似配置,把.onion端口映射到socket.io的监听端口:
    HiddenServiceDir /var/lib/tor/socketio-hidden-service/
    HiddenServicePort 3000 127.0.0.1:3000
    
  • 强制使用WebSocket传输(transports: ['websocket']),避免长轮询在代理环境下的兼容性问题
  • 如果服务器端启用了HTTPS/wss,需要确保.onion地址有对应的证书(不过大多数.onion服务用HTTP/ws即可)

内容的提问来源于stack exchange,提问作者Konstantin Rybakov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:25