撸了个把 SOCKS 代理转成 HTTP 协议代理的 Nodejs 工具,但是遇到了个问题!

撸了个把 SOCKS 代理转成 HTTP 协议代理的 Nodejs 工具,但是遇到了个问题!

各位看官,别嫌弃代码渣。项目地址在这: https://github.com/m31271n/jet

说说遇到的问题, Jet 有个功能是根据请求的 hostname 来 Block 请求,对于这个请求,返回一个 Jet 的提示信息,比如:


                                         _|              _|
                                         _|    _|_|    _|_|_|_|
                                         _|  _|_|_|_|    _|
                                   _|    _|  _|          _|
                                     _|_|      _|_|_|      _|_|
                                    This site is blocked.

对于 HTTP 请求,可以直接使用 response.write() 来写 response ,代码在这里;然而对于 HTTPS 请求,代码在这里 ,回调函数里的参数是一个 socket 对象,不知道该怎么写入请求内容了


10 回复

stackoverflow 里提到的貌似还是在转发远端服务器的响应,而不是真正地让代理服务直接响应请求。

又造轮子,不是有 priprivoxy 嘛

了解原理,并用掌握的原理再实现出来,是挺好玩的一个事儿。有没有人用又是另外一回事儿了。毕竟「一个了解事物原由的人,才是幸福的」嘛。嘻嘻~

没法写啊,除非你中间人
HTTPS 是加密的嘛,你不知道私钥就没用

渣渣表示看不懂

假如我是中间人,该怎么干?

在用户电脑上加自己的 CA
参见 squid 的 SSL bump 模式

你好!很高兴你对网络代理工具的开发感兴趣。将 SOCKS 代理转换成 HTTP 代理确实是一个有趣且实用的任务,但在实现过程中可能会遇到一些问题。以下是一些可能的解决方案和代码示例,希望能帮到你。

首先,确保你已经安装了必要的 Node.js 库,比如 socks5-http-clienthttp-proxy。你可以通过 npm 来安装这些库:

npm install socks5-http-client http-proxy

接下来,你可以使用以下代码来创建一个简单的代理服务器,将 SOCKS5 请求转换为 HTTP 请求:

const SocksProxyAgent = require('socks5-http-client/lib/Agent');
const httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer({ changeOrigin: true });

const socksAgent = new SocksProxyAgent({
  host: 'your-socks-proxy-host',
  port: yourSocksProxyPort,
  username: 'your-username', // 如果需要认证的话
  password: 'your-password'  // 如果需要认证的话
});

proxy.on('proxyReq', (proxyReq, req, res, options) => {
  proxyReq.setAgent(socksAgent);
});

proxy.listen(8080, () => {
  console.log('HTTP Proxy listening on port 8080');
});

在这段代码中,SocksProxyAgent 用于处理 SOCKS5 代理连接,而 http-proxy 用于创建 HTTP 代理服务器。确保你替换 your-socks-proxy-hostyourSocksProxyPortyour-usernameyour-password 为你的 SOCKS 代理服务器的实际配置。

如果你遇到具体的错误信息或行为不符合预期,请提供详细的错误描述或日志,以便进一步分析和解决。

回到顶部