zone1.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const net = require('node:net');
  2. const { Transform } = require('node:stream');
  3. const LOCAL_PORT = 1935;
  4. const REMOTE_PORT = 1936;
  5. const REMOTE_ADDR = '127.0.0.1';
  6. /**
  7. * 将十进制数字转换为4字节的 Buffer
  8. * @param {number} number 数字
  9. * @param {string} byteOrder 排序
  10. * @returns {Buffer}
  11. */
  12. function toFixed4ByteBuffer(number, byteOrder = 'BE') {
  13. if (number < 0 || number > 0xFFFFFFFF) {
  14. throw new Error('Number must be between 0 and 4294967295');
  15. }
  16. const buffer = Buffer.alloc(4); // 创建一个4字节的 Buffer
  17. if (byteOrder === 'BE') {
  18. buffer.writeUInt32BE(number, 0); // 大端顺序
  19. } else if (byteOrder === 'LE') {
  20. buffer.writeUInt32LE(number, 0); // 小端顺序
  21. } else {
  22. throw new Error('Invalid byte order');
  23. }
  24. return buffer;
  25. }
  26. class CustomTransform extends Transform {
  27. _transform(chunk, encoding, callback) {
  28. const packet = Buffer.concat([toFixed4ByteBuffer(chunk.length), chunk]);
  29. this.push(packet, encoding);
  30. callback();
  31. }
  32. }
  33. const getIdentifier = () => {
  34. return Buffer.from([0x01, 0x02, 0x03, 0x04]);
  35. };
  36. function bootstrap() {
  37. const proxy = net.createServer();
  38. proxy.on('connection', (clientSocket) => {
  39. console.log('Client connected');
  40. // 创建一个新的连接到目标服务器
  41. const targetSocket = net.createConnection({
  42. host: REMOTE_ADDR, // 目标服务器的地址
  43. port: REMOTE_PORT // 目标服务器的端口
  44. }, () => {
  45. console.log('Proxy connected to target server');
  46. });
  47. // 将接收到的数据转发到目标服务器
  48. clientSocket.pipe(new CustomTransform()).pipe(targetSocket)
  49. // 将目标服务器的响应数据转发回客户端
  50. targetSocket.on('data', chunk => {
  51. clientSocket.write(chunk);
  52. });
  53. // 处理代理与目标服务器的关闭事件
  54. clientSocket.on('close', () => {
  55. targetSocket.end();
  56. });
  57. targetSocket.on('close', () => {
  58. clientSocket.end();
  59. });
  60. });
  61. // 监听本地端口
  62. proxy.listen(LOCAL_PORT, () => {
  63. console.log('Zone1 proxy server is listening on port ' + LOCAL_PORT);
  64. });
  65. }
  66. bootstrap();