| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * Proxy Bridge
- * Copyright PANCHO7532 - P7COMUnications LLC (c) 2021
- * Dedicated to Emanuel Miranda, for giving me the idea to make this :v
- */
- const net = require('net');
- const stream = require('stream');
- const util = require('util');
- var dhost = "127.0.0.1";
- var dport = "8080";
- var mainPort = "8888";
- var outputFile = "outputFile.txt";
- var packetsToSkip = 0;
- var gcwarn = true;
- for(c = 0; c < process.argv.length; c++) {
- switch(process.argv[c]) {
- case "-skip":
- packetsToSkip = process.argv[c + 1];
- break;
- case "-dhost":
- dhost = process.argv[c + 1];
- break;
- case "-dport":
- dport = process.argv[c + 1];
- break;
- case "-mport":
- mainPort = process.argv[c + 1];
- break;
- case "-o":
- outputFile = process.argv[c + 1];
- break;
- }
- }
- function gcollector() {
- if(!global.gc && gcwarn) {
- console.log("[WARNING] - Garbage Collector isn't enabled! Memory leaks may occur.");
- gcwarn = false;
- return;
- } else if(global.gc) {
- global.gc();
- return;
- } else {
- return;
- }
- }
- function parseRemoteAddr(raddr) {
- if(raddr.toString().indexOf("ffff") != -1) {
- //is IPV4 address
- return raddr.substring(7, raddr.length);
- } else {
- return raddr;
- }
- }
- setInterval(gcollector, 1000);
- const server = net.createServer();
- server.on('connection', function(socket) {
- var packetCount = 0;
- //var handshakeMade = false;
- socket.write("HTTP/1.1 101 Switching Protocols\r\nContent-Length: 1048576000000\r\n\r\n");
- console.log("[INFO] - Connection received from " + socket.remoteAddress + ":" + socket.remotePort);
- var conn = net.createConnection({host: dhost, port: dport});
- socket.on('data', function(data) {
- //pipe sucks
- if(packetCount < packetsToSkip) {
- //console.log("---c1");
- packetCount++;
- } else if(packetCount == packetsToSkip) {
- //console.log("---c2");
- conn.write(data);
- }
- if(packetCount > packetsToSkip) {
- //console.log("---c3");
- packetCount = packetsToSkip;
- }
- //conn.write(data);
- });
- conn.on('data', function(data) {
- //pipe sucks x2
- socket.write(data);
- });
- socket.once('data', function(data) {
- /*
- * Nota para mas tarde, resolver que diferencia hay entre .on y .once
- */
- });
- socket.on('error', function(error) {
- console.log("[SOCKET] - read " + error + " from " + socket.remoteAddress + ":" + socket.remotePort);
- conn.destroy();
- });
- conn.on('error', function(error) {
- console.log("[REMOTE] - read " + error);
- socket.destroy();
- });
- socket.on('close', function() {
- console.log("[INFO] - Connection terminated for " + socket.remoteAddress + ":" + socket.remotePort);
- conn.destroy();
- });
- });
- server.listen(mainPort, function(){
- console.log("[INFO] - Server started on port: " + mainPort);
- console.log("[INFO] - Redirecting requests to: " + dhost + " at port " + dport);
- });
|