用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

System Architecture of Http4gfw

Config & Run

  1. upload the project to Http-Host Server supporting Node.js, app.js is the start script.
  2. in local machine, run SOCKS5 script localA.js
  3. in local machine, run DNS-Server Script localB.js
  4. 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

  1. the speed is much slower than normal VPN
  2. it is just an experimental project, must have many bugs.

3 回复

用Nodejs和socket.io隧道实现的一个应用

介绍

本人开发的一个项目,发布在Github上。地址为 https://github.com/yeefont/http4gfw

对Socket、Stream的事件处理是否合理,不是很有把握。欢迎大家指教。

以下说明就是README:

项目概述

Http4GFW 是一个由 Yeefont 开发的开源项目,旨在通过一些互联网中的敏感防火墙传递网络流量。得益于 socket.io,HTTP流量的任务变得简单得多。

如何工作

系统架构图展示了整个项目的运作方式。

配置与运行

  1. 将项目上传到支持Node.js的HTTP主机服务器上,启动脚本为 app.js
  2. 在本地机器上运行SOCKS5脚本 localA.js
  3. 在本地机器上运行DNS服务器脚本 localB.js
  4. 在浏览器中设置SOCKS5代理地址(默认为 127.0.0.1:8888),并设置接口的DNS服务器地址(默认为 127.0.0.1)。

请根据您的环境修改 config.js 文件。

调试

您可以在本地机器上运行代理服务器进行调试。

问题

  1. 速度比普通VPN慢。
  2. 这只是一个实验性项目,肯定存在许多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的工作流程是:

  1. 客户端(例如浏览器)通过SOCKS5代理服务器(由localA.js提供)发送请求。
  2. 请求被转发到HTTP宿主机(运行 app.js 脚本的地方),该宿主机将数据通过socket.io通道传送到客户端。
  3. 在宿主机上,DNS解析请求(通过 localB.js 处理)并返回结果。

配置与运行

  1. 将项目部署到支持Node.js的HTTP宿主机,启动脚本为 app.js
  2. 在本地机器上运行SOCKS5脚本 localA.js
  3. 在本地机器上运行DNS服务脚本 localB.js
  4. 配置浏览器的SOCKS5代理(默认为 127.0.0.1:8888),并设置DNS服务器地址(默认为 127.0.0.1)。

请根据你的环境修改 config.js 文件中的配置。

调试

你可以直接在本地机器上运行代理服务器以进行调试。

已知问题

  1. 速度比普通VPN慢。
  2. 这只是一个实验性项目,可能存在许多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') 事件。

这只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理不同类型的请求和响应。

回到顶部