用Nodejs和socket.io隧道实现的一个应用
用Nodejs和socket.io隧道实现的一个应用
本人开发的一个项目,发布在Github上。地址为https://github.com/yeefont/http4gfw 对Socket, Stream的事件处理是否合理,不是很有把握。欢迎大家指教。 以下说明就是README
Http4GFW is a free and open source project developed by Yeefont. It aims to make web traffic pass through some sensitive firewall in internet. Thanks to socket.io , the task on HTTP-traffic is much simpler now.
How It Works
Config & Run
- upload the project to Http-Host Server supporting Node.js, app.js is the start script.
- in local machine, run SOCKS5 script localA.js
- in local machine, run DNS-Server Script localB.js
- in local machine, set Browser’s SOCKS5 proxy address(default is 127.0.0.1:8888, set interface’s DNS-Server address(default is 127.0.0.1)
Please modify config.js according to your environment.
Debug
You can run the proxy-server in local machine.
Issues
- the speed is much slower than normal VPN
- it is just an experimental project, must have many bugs.
用Nodejs和socket.io隧道实现的一个应用
介绍
本人开发的一个项目,发布在Github上。地址为 https://github.com/yeefont/http4gfw
对Socket、Stream的事件处理是否合理,不是很有把握。欢迎大家指教。
以下说明就是README:
项目概述
Http4GFW 是一个由 Yeefont 开发的开源项目,旨在通过一些互联网中的敏感防火墙传递网络流量。得益于 socket.io,HTTP流量的任务变得简单得多。
如何工作
系统架构图展示了整个项目的运作方式。
配置与运行
- 将项目上传到支持Node.js的HTTP主机服务器上,启动脚本为
app.js
。 - 在本地机器上运行SOCKS5脚本
localA.js
。 - 在本地机器上运行DNS服务器脚本
localB.js
。 - 在浏览器中设置SOCKS5代理地址(默认为
127.0.0.1:8888
),并设置接口的DNS服务器地址(默认为127.0.0.1
)。
请根据您的环境修改 config.js
文件。
调试
您可以在本地机器上运行代理服务器进行调试。
问题
- 速度比普通VPN慢。
- 这只是一个实验性项目,肯定存在许多bug。
示例代码
app.js
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
io.on('connection', (socket) => {
console.log('New client connected');
socket.on('disconnect', () => {
console.log('Client disconnected');
});
socket.on('data', (data) => {
// 处理接收到的数据
console.log(`Received data: ${data}`);
// 将数据发送给客户端
socket.emit('response', 'Data received successfully');
});
});
server.listen(3000, () => {
console.log('Server listening on port 3000');
});
localA.js
const io = require('socket.io-client');
const socket = io.connect('http://localhost:3000');
socket.on('connect', () => {
console.log('Connected to server');
// 发送数据到服务器
socket.emit('data', 'Hello from localA');
});
socket.on('response', (data) => {
console.log(`Server response: ${data}`);
});
config.js
module.exports = {
serverUrl: 'http://localhost:3000',
socksProxyPort: 8888,
dnsServerAddress: '127.0.0.1'
};
localB.js
const dns = require('dns');
// 设置DNS服务器
dns.setServers([config.dnsServerAddress]);
console.log('DNS server set to:', config.dnsServerAddress);
以上示例代码展示了如何使用Node.js和socket.io实现一个简单的隧道应用。您可以根据需要进一步扩展和优化这些代码。
looking good. 加油
用Node.js和socket.io隧道实现的应用
简介
Http4GFW 是一个免费开源项目,旨在帮助用户通过某些敏感的网络防火墙访问互联网。该项目利用了 socket.io 库简化了HTTP流量处理的任务。
工作原理
Http4GFW的工作流程是:
- 客户端(例如浏览器)通过SOCKS5代理服务器(由
localA.js
提供)发送请求。 - 请求被转发到HTTP宿主机(运行
app.js
脚本的地方),该宿主机将数据通过socket.io通道传送到客户端。 - 在宿主机上,DNS解析请求(通过
localB.js
处理)并返回结果。
配置与运行
- 将项目部署到支持Node.js的HTTP宿主机,启动脚本为
app.js
。 - 在本地机器上运行SOCKS5脚本
localA.js
。 - 在本地机器上运行DNS服务脚本
localB.js
。 - 配置浏览器的SOCKS5代理(默认为
127.0.0.1:8888
),并设置DNS服务器地址(默认为127.0.0.1
)。
请根据你的环境修改 config.js
文件中的配置。
调试
你可以直接在本地机器上运行代理服务器以进行调试。
已知问题
- 速度比普通VPN慢。
- 这只是一个实验性项目,可能存在许多bug。
示例代码
以下是 app.js
的简要代码示例:
const express = require('express');
const http = require('http');
const io = require('socket.io');
const app = express();
const server = http.createServer(app);
const socketIo = io(server);
// 监听SOCKET.IO连接
socketIo.on('connection', (socket) => {
console.log('New client connected');
// 监听客户端数据
socket.on('message', (data) => {
console.log('Message received:', data);
// 处理数据后,发送响应
socket.emit('response', 'Data processed successfully');
});
// 当客户端断开连接时
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
app.js
使用Express创建了一个HTTP服务器,并使用socket.io来处理WebSocket通信。socketIo.on('connection')
用于监听新的客户端连接。socket.on('message')
用于接收客户端发送的数据,并通过socket.emit('response')
发送响应。- 当客户端断开连接时,触发
socket.on('disconnect')
事件。
这只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理不同类型的请求和响应。