mirror of
				https://git.coolaj86.com/coolaj86/telebit.js.git
				synced 2025-11-04 02:32:47 +00:00 
			
		
		
		
	put ssh detection on full auto
This commit is contained in:
		
							parent
							
								
									e85bd78905
								
							
						
					
					
						commit
						33063d3efe
					
				@ -1,6 +1,7 @@
 | 
			
		||||
agree_tos: true                 # agree to the Telebit, Greenlock, and Let's Encrypt TOSes
 | 
			
		||||
community_member: true          # receive infrequent relevant updates
 | 
			
		||||
telemetry: true                 # contribute to project telemetric data
 | 
			
		||||
ssh_auto: 22                    # forward ssh-looking packets, from any connection, to port 22
 | 
			
		||||
remote_options:
 | 
			
		||||
  https_redirect: true          # redirect http to https remotely (default)
 | 
			
		||||
local_ports:                    # ports to forward
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,16 @@ module.exports.assign = function (state, tun, cb) {
 | 
			
		||||
  console.log('first message from', tun);
 | 
			
		||||
  var net = state.net || require('net');
 | 
			
		||||
 | 
			
		||||
  function trySsh(tun, cb) {
 | 
			
		||||
    // https://security.stackexchange.com/questions/43231/plausibly-deniable-ssh-does-it-make-sense?rq=1
 | 
			
		||||
    // https://tools.ietf.org/html/rfc4253#section-4.2
 | 
			
		||||
    if (false === state.config.ssh_auto || 'SSH-2.0-' !== tun.data.slice(0, 8).toString()) {
 | 
			
		||||
      cb(null, false);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    cb(null, getNetConn(state.config.sshPort || 22));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var handlers = {};
 | 
			
		||||
  handlers.http = function (socket) {
 | 
			
		||||
    if (!state.greenlock) {
 | 
			
		||||
@ -201,11 +211,30 @@ module.exports.assign = function (state, tun, cb) {
 | 
			
		||||
          //console.log('[hit tls server]', tlsSocket.remoteFamily, tlsSocket.remoteAddress, tlsSocket.remotePort, tlsSocket.localPort);
 | 
			
		||||
          //console.log(addr);
 | 
			
		||||
          var conf = state.config.servernames[tlsSocket.servername];
 | 
			
		||||
          if (!conf || !conf.handler) {
 | 
			
		||||
            handlers.https(tlsSocket);
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
          invokeHandler(conf, tlsSocket, tun, id);
 | 
			
		||||
          tlsSocket.once('data', function (firstChunk) {
 | 
			
		||||
            tlsSocket.pause();
 | 
			
		||||
            //tlsSocket.unshift(firstChunk);
 | 
			
		||||
            tlsSocket._handle.onread(firstChunk.length, firstChunk);
 | 
			
		||||
 | 
			
		||||
            trySsh({ data: firstChunk }, function (err, conn) {
 | 
			
		||||
              process.nextTick(function () { tlsSocket.resume(); });
 | 
			
		||||
 | 
			
		||||
              if (conn) {
 | 
			
		||||
                conn.pipe(tlsSocket);
 | 
			
		||||
                tlsSocket.pipe(conn);
 | 
			
		||||
                return;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              if (!conf || !conf.handler) {
 | 
			
		||||
                console.log('https default handler');
 | 
			
		||||
                handlers.https(tlsSocket);
 | 
			
		||||
                return;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              console.log('https invokeHandler');
 | 
			
		||||
              invokeHandler(conf, tlsSocket, tun, id);
 | 
			
		||||
            });
 | 
			
		||||
          });
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
@ -284,19 +313,11 @@ module.exports.assign = function (state, tun, cb) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function trySsh(tun) {
 | 
			
		||||
    // https://security.stackexchange.com/questions/43231/plausibly-deniable-ssh-does-it-make-sense?rq=1
 | 
			
		||||
    // https://tools.ietf.org/html/rfc4253#section-4.2
 | 
			
		||||
    if ('SSH-2.0-' !== tun.data.slice(0, 8).toString()) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    cb(null, getNetConn(state.config.sshPort || 22));
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ('tcp' === tun.service) {
 | 
			
		||||
    if (trySsh(tun)) { return; }
 | 
			
		||||
    cb(new Error("No TCP handler"));
 | 
			
		||||
    trySsh(tun, function (err, conn) {
 | 
			
		||||
      if (conn) { cb(null, conn); return; }
 | 
			
		||||
      cb(new Error("No TCP handler"));
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.warn("Unknown service '" + tun.service + "'");
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user