| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const net = require('node:net');
- const { Transform } = require('node:stream');
- const LOCAL_PORT = 1935;
- const REMOTE_PORT = 1936;
- const REMOTE_ADDR = '127.0.0.1';
- /**
- * 将十进制数字转换为4字节的 Buffer
- * @param {number} number 数字
- * @param {string} byteOrder 排序
- * @returns {Buffer}
- */
- function toFixed4ByteBuffer(number, byteOrder = 'BE') {
- if (number < 0 || number > 0xFFFFFFFF) {
- throw new Error('Number must be between 0 and 4294967295');
- }
- const buffer = Buffer.alloc(4); // 创建一个4字节的 Buffer
- if (byteOrder === 'BE') {
- buffer.writeUInt32BE(number, 0); // 大端顺序
- } else if (byteOrder === 'LE') {
- buffer.writeUInt32LE(number, 0); // 小端顺序
- } else {
- throw new Error('Invalid byte order');
- }
- return buffer;
- }
- class CustomTransform extends Transform {
- _transform(chunk, encoding, callback) {
- const packet = Buffer.concat([toFixed4ByteBuffer(chunk.length), chunk]);
- this.push(packet, encoding);
- callback();
- }
- }
- const getIdentifier = () => {
- return Buffer.from([0x01, 0x02, 0x03, 0x04]);
- };
- function bootstrap() {
- const proxy = net.createServer();
- proxy.on('connection', (clientSocket) => {
- console.log('Client connected');
- // 创建一个新的连接到目标服务器
- const targetSocket = net.createConnection({
- host: REMOTE_ADDR, // 目标服务器的地址
- port: REMOTE_PORT // 目标服务器的端口
- }, () => {
- console.log('Proxy connected to target server');
- });
- // 将接收到的数据转发到目标服务器
- clientSocket.pipe(new CustomTransform()).pipe(targetSocket)
- // 将目标服务器的响应数据转发回客户端
- targetSocket.on('data', chunk => {
- clientSocket.write(chunk);
- });
- // 处理代理与目标服务器的关闭事件
- clientSocket.on('close', () => {
- targetSocket.end();
- });
- targetSocket.on('close', () => {
- clientSocket.end();
- });
- });
- // 监听本地端口
- proxy.listen(LOCAL_PORT, () => {
- console.log('Zone1 proxy server is listening on port ' + LOCAL_PORT);
- });
- }
- bootstrap();
|