!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/server/node_modules/findhit-proxywrap/lib/   drwxr-xr-x
Free 12.97 GB of 57.97 GB (22.38%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     proxywrap.js (9.04 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 * node-proxywrap
 *
 * Copyright (c) 2013, Josh Dague
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

var util = require('util'),
  Util = require('findhit-util'),
  ProxyProtocolRegexp = require('./proxy-protocol.regexp.js')

//var legacy = !require('stream').Duplex;  // TODO: Support <= 0.8 streams interface

exports.defaults = {
  strict: true,
  ignoreStrictExceptions: false,
  overrideRemote: true
}

var proxyProtocolFields = {
  remoteAddress: {
    fieldIndex: 2
  },
  remotePort: {
    fieldIndex: 4,
    isNumber: true
  },
  clientAddress: {
    fieldIndex: 2
  },
  clientPort: {
    fieldIndex: 4,
    isNumber: true
  },
  proxyAddress: {
    fieldIndex: 3
  },
  proxyPort: {
    fieldIndex: 5,
    isNumber: true
  }
}

function createSocketPropertyGetter(header, propertyName) {
  return function() {
    var property = proxyProtocolFields[propertyName]
    var value = header[property.fieldIndex]
    return property.isNumber ? parseInt(value, 10) : value
  }
}

function createTLSSocketPropertyGetter(tlsSocket, propertyName) {
  return function() {
    return tlsSocket._parent[propertyName]
  }
}

function defineProperty(target, propertyName, getter) {
  Object.defineProperty(target, propertyName, {
    enumerable: false,
    configurable: true,
    get: getter
  })
}

function defineSocketProperties(socket, properties, header) {
  for (var i in properties) {
    var propertyName = properties[i]
    var getter = createSocketPropertyGetter(header, propertyName)
    defineProperty(socket, propertyName, getter)
  }
}

// Wraps the given module (ie, http, https, net, tls, etc) interface so that
// `socket.remoteAddress` and `remotePort` work correctly when used with the
// PROXY protocol (http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt)
// strict option drops requests without proxy headers, enabled by default to match previous behavior, disable to allow both proxied and non-proxied requests
exports.proxy = function(iface, options) {
  var exports = {}

  options = Util.extend(
    {},
    module.exports.defaults,
    (Util.is.Object(options) && options) || {}
  )

  // copy iface's exports to myself
  for (var k in iface)
    exports[k] = iface[k]

  function ProxiedServer(options, requestListener) {
    if (!(this instanceof ProxiedServer))
      return new ProxiedServer(options, requestListener)

    if (typeof options == 'function') {
      requestListener = options
      options = null
    }

    // call original constructor with correct argument order
    if (options) iface.Server.call(this, options, requestListener)
    else iface.Server.call(this, requestListener)

    // remove the connection listener attached by iface.Server and replace it with our own.
    var cl = this.listeners('connection')
    this.removeAllListeners('connection')
    this.addListener('connection', connectionListener)

    // add the old connection listeners to a custom event, which we'll fire after processing the PROXY header
    for (var i = 0; i < cl.length; i++) {
      this.addListener('proxiedConnection', cl[i])
    }

    // changing secure connection listeners to set remoteAddress property on socket
    var scl = this.listeners('secureConnection')
    this.removeAllListeners('secureConnection')

    for (var idx in scl) {
      this.addListener(
        'secureConnection',
        createSecureConnectionListener(this, scl[idx])
      )
    }
  }
  util.inherits(ProxiedServer, iface.Server)

  exports.createServer = function(opts, requestListener) {
    return new ProxiedServer(opts, requestListener)
  }

  exports.Server = ProxiedServer

  exports.options = ProxiedServer.options = options

  function connectionListener(socket) {
    var self = this, realEmit = socket.emit, history = [], protocolError = false

    // TODO: Support <= 0.8 streams interface
    //function ondata() {}
    //if (legacy) socket.once('data', ondata);

    // override the socket's event emitter so we can process data (and discard the PROXY protocol header) before the underlying Server gets it
    socket.emit = (function() {
      var isReadable
      return function(event, data) {
        history.push(Array.prototype.slice.call(arguments))

        if (event === 'readable') {
          isReadable = true
          return onReadable()
        }
        // Only needed for node.js 0.10
        if (event === 'end' && !isReadable) {
          self.emit('proxiedConnection', socket)
          restore()
        }
      }
    })()

    function restore() {
      if (socket.emit === realEmit) return

      //if (legacy) socket.removeListener('data', ondata);
      // restore normal socket functionality, and fire any events that were emitted while we had control of emit()
      socket.emit = realEmit
      for (var i = 0; i < history.length; i++) {
        realEmit.apply(socket, history[i])
        if (history[i][0] == 'end' && socket.onend) socket.onend()
      }
      history = null
    }

    function destroy(error, wasStrict) {
      error = error || undefined

      if (!(error instanceof Error)) {
        error = new Error(error)
      }

      // Set header on error
      error.header = header

      protocolError = true

      socket.destroy(
        wasStrict
          ? (!options.ignoreStrictExceptions && error) || undefined
          : error
      )

      restore()
    }

    socket.on('readable', onReadable)

    var header = '', buf = new Buffer(0)

    function onReadable() {
      var chunk
      chunk = socket.read()

      if (null === chunk && header.length === 0) {
        // unshifting will fire the readable event
        socket.emit = realEmit
        self.emit('proxiedConnection', socket)
        return
      }

      while (null !== chunk) {
        buf = Buffer.concat([buf, chunk])
        header += chunk.toString('ascii')

        // if the first 5 bytes aren't PROXY, something's not right.
        if (header.length >= 5 && header.substr(0, 5) != 'PROXY') {
          protocolError = true
          if (options.strict) {
            return destroy('non-PROXY protocol connection', true)
          }
        }

        var crlf = header.indexOf('\r')
        if (crlf > 0 || protocolError) {
          socket.removeListener('readable', onReadable)
          header = header.substr(0, crlf)

          // Check if header is valid
          if (options.strict) {
            if (!ProxyProtocolRegexp.test(header)) {
              return destroy('PROXY protocol malformed header', true)
            }
          }

          var hlen = header.length
          header = header.split(' ')

          if (!protocolError) {
            var properties = Object.keys(proxyProtocolFields)
            properties = options.overrideRemote
              ? properties
              : properties.slice(2)
            defineSocketProperties(socket, properties, header)
          }

          // unshifting will fire the readable event
          socket.emit = realEmit
          socket.unshift(buf.slice(protocolError ? 0 : crlf + 2))

          self.emit('proxiedConnection', socket)

          restore()

          if (socket.ondata) {
            var data = socket.read()

            if (data) {
              socket.ondata(data, 0, data.length)
            }
          }

          return
        } else if (header.length > 107) {
          return destroy('PROXY header too long', false)
        }

        chunk = socket.read()
      }
    }
  }

  function createSecureConnectionListener(context, listener) {
    return function(socket) {
      var properties = Object.keys(proxyProtocolFields)
      defineTLSSocketProperties(socket, properties)
      listener.call(context, socket)
    }
  }

  function defineTLSSocketProperties(tlsSocket, properties) {
    for (var i in properties) {
      var propertyName = properties[i]
      var getter = createTLSSocketPropertyGetter(tlsSocket, propertyName)
      defineProperty(tlsSocket, propertyName, getter)
    }
  }

  return exports
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0046 ]--