mirror of
https://github.com/Ylianst/MeshAgent
synced 2026-01-05 01:54:00 +00:00
First commit of MeshAgent for MeshCentral
This commit is contained in:
113
Debug/tunnel.js
Normal file
113
Debug/tunnel.js
Normal file
@@ -0,0 +1,113 @@
|
||||
var proxy;
|
||||
var i;
|
||||
|
||||
var http = require('http');
|
||||
var net = require('net');
|
||||
var host = null;
|
||||
var port = 443;
|
||||
var id = null;
|
||||
var req;
|
||||
var local = 0;
|
||||
|
||||
var remoteHost = "";
|
||||
var remotePort = 0;
|
||||
|
||||
process.on("uncaughtException", function (e) { console.log("UncaughtException: " + e); });
|
||||
process.on("exit", function (code) { console.log("Process Exiting with code: " + code); });
|
||||
|
||||
function onWebSocket(response, s, head)
|
||||
{
|
||||
console.log("WebSocket connected");
|
||||
s.data = onWebSocketData;
|
||||
}
|
||||
function OnNewConnection(connection)
|
||||
{
|
||||
console.log("New Local Connection");
|
||||
this.parent.pipe(connection);
|
||||
connection.pipe(this.parent);
|
||||
}
|
||||
|
||||
function OnClientConnection()
|
||||
{
|
||||
console.log("New Client Connection Established");
|
||||
this.parent.pipe(this);
|
||||
this.pipe(this.parent);
|
||||
}
|
||||
|
||||
function onWebSocketData(buffer)
|
||||
{
|
||||
if(buffer == 'c')
|
||||
{
|
||||
console.log("tunnel established");
|
||||
this.pause();
|
||||
|
||||
if (local != 0)
|
||||
{
|
||||
this.server = net.createServer();
|
||||
this.server.parent = this;
|
||||
this.server.on('connection', OnNewConnection);
|
||||
this.server.listen({ port: local });
|
||||
}
|
||||
if(remotePort != 0)
|
||||
{
|
||||
this.client = net.createConnection({ port: remotePort, host: remoteHost }, OnClientConnection);
|
||||
this.client.parent = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i = 1; i < process.argv.length; ++i)
|
||||
{
|
||||
if(process.argv[i] == 'local')
|
||||
{
|
||||
console.log("binding local port " + (local = parseInt(process.argv[i + 1])));
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'remote')
|
||||
{
|
||||
remoteHost = process.argv[i + 1];
|
||||
remotePort = parseInt(process.argv[i + 2])
|
||||
console.log("binding remote " + remoteHost + ":" + remotePort);
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'proxy')
|
||||
{
|
||||
console.log("Using Proxy: " + process.argv[i + 1] + ":" + parseInt(process.argv[i + 2]));
|
||||
proxy = require('global-tunnel');
|
||||
try
|
||||
{
|
||||
proxy.initialize({ host: process.argv[i + 1], port: parseInt(process.argv[i + 2]) });
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
console.log("Unable to bind proxy: " + e);
|
||||
}
|
||||
i += 2;
|
||||
}
|
||||
else if(process.argv[i] == 'relayHost')
|
||||
{
|
||||
host = process.argv[i + 1];
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'relayId')
|
||||
{
|
||||
id = process.argv[i + 1];
|
||||
++i;
|
||||
}
|
||||
else if(process.argv[i] == 'relayPort')
|
||||
{
|
||||
port = parseInt(argv[i + 1]);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
if (host != null && id != null)
|
||||
{
|
||||
console.log("using relay: [" + host + ":" + port + "] using id: " + id);
|
||||
req = http.request({ protocol: "wss:", host: host, port: port, path: "/meshrelay.ashx?id='" + id + "'" });
|
||||
req.upgrade = onWebSocket;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user