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();