如何使用 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 连接到隐藏服务?的主要内容,如果未能解决你的问题,请参考以下文章
从网络/TCP/HTTP 连接的角度来看,Node.js 是如何工作的? WCF 可以模拟这个吗?
node.js ssh2 => 如何关闭连接并处理 ECONNRESET 错误