如何使用 socks4a 从 node.js 连接到隐藏服务?

Posted

技术标签:

【中文标题】如何使用 socks4a 从 node.js 连接到隐藏服务?【英文标题】:How to connect to hidden service from node.js using socks4a? 【发布时间】:2015-06-06 09:15:41 【问题描述】:

TOR documentation 表示需要 SOCKS4a 才能连接到隐藏服务。有一个实现 SOCKS4a 的node library。

假设知道一个隐藏服务的.onion 地址,应该如何使用https 连接到这个隐藏服务以从node.js 应用程序在线获取网页?欢迎提供代码示例。

更准确地说,我已经为 Openshift 安装了 Tor 墨盒,但我不清楚连接到它并使用它。我在Tor stack exchange 上创建了一个相关问题。

【问题讨论】:

你看过 NPM 仓库中各种 TOR 相关的模块吗?例如,torfetch 似乎能够为所欲为。 我做到了。您提到的模块获取 TOR 网络本身的页面,而不是通过 TOR 网络获取一般 Internet 页面。 【参考方案1】:

通常 TOR 隐藏服务不使用 HTTPS,因为 TOR 已经为通过网络路由的数据包提供了强大的加密功能。但有些服务确实使用它。我最近需要与 TOR 隐藏服务背后的 Web API 进行通信。这是我为使其工作所做的工作。

安装 TOR。在 debian/Ubuntu 系统上:

sudo apt-get install tor

对于其他系统,请查看the official website 以获取匹配的安装指南。

使用以下 nodejs 脚本从 TOR 隐藏服务中获取网页。默认情况下,它将获取 DuckDuckGo 的家庭年龄,该年龄由其 v3 洋葱地址提供服务。

const url = require('url');
const http = require('http');
const https = require('https');
const SocksProxyAgent = require('socks-proxy-agent');

// Use the SOCKS_PROXY env var if using a custom bind address or port for your TOR proxy:
const proxy = process.env.SOCKS_PROXY || 'socks5h://127.0.0.1:9050';
console.log('Using proxy server %j', proxy);
// The default HTTP endpoint here is DuckDuckGo's v3 onion address:
const endpoint = process.argv[2] || 'https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion';
console.log('Attempting to GET %j', endpoint);
// Prepare options for the http/s module by parsing the endpoint URL:
let options = url.parse(endpoint);
const agent = new SocksProxyAgent(proxy);
// Here we pass the socks proxy agent to the http/s module:
options.agent = agent;
// Depending on the endpoint's protocol, we use http or https module:
const httpOrHttps = options.protocol === 'https:' ? https : http;
// Make an HTTP GET request:
httpOrHttps.get(options, res => 
    // Print headers on response:
    console.log('Response received', res.headers);
    // Pipe response body to output stream:
    res.pipe(process.stdout);
);
将以上脚本保存到名为tor-http-fetch.js的文件中 安装socks-proxy-agent npm 模块:npm install socks-proxy-agent 运行脚本:node tor-http-fetch.js 获取您自己的洋葱服务:node ./tor-http-fetch.js "http://your-tor-hidden-service.onion"

上述脚本适用于 http 或 https URL。

更多详情可以查看here

祝你好运!

【讨论】:

以上是关于如何使用 socks4a 从 node.js 连接到隐藏服务?的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中修剪和连接音频文件

从网络/TCP/HTTP 连接的角度来看,Node.js 是如何工作的? WCF 可以模拟这个吗?

node.js ssh2 => 如何关闭连接并处理 ECONNRESET 错误

如何使用 mongodb 和 node js 更新和拉取用户

如何让我的 Node.js MySQL 连接作为承诺工作?

使用 Node.js 从 AWS Lambda 函数连接到 MySql 数据库,没有连接回调