class SimpleFtpServer(multiprocessing.Process):
    def __init__(self):
        super().__init__()
        self.authorizer = DummyAuthorizer()
        handler = FTPHandler
        handler.authorizer = self.authorizer
        self.server = FTPServer(("127.0.0.1", 0), handler)

    def run(self):
        self.server.serve_forever()

    def stop(self):
        self.server.close_all()
        self.server.close()
        self.terminate()
        self.join()

    def allow_anonymous(self, cwd):
        self.authorizer.add_anonymous(cwd)

    def add_user(self, user, password, cwd):
        self.authorizer.add_user(user, password, cwd, perm="elradfmwMT")

    def base_url(self):
        return "ftp://127.0.0.1:{}".format(self.server.address[1])
Beispiel #2
0
class FtpDaemon:
    def __init__(self):
        self.daemon = None

    def run_in_thread(self):
        ftp_thread = Thread(target=self._run)
        ftp_thread.daemon = True
        ftp_thread.start()

    def _run(self):
        try:
            authorizer = DummyAuthorizer()
            # todo: make auth for every user
            authorizer.add_user('2aNTjQTyL8VY5zcUtF',
                                '4Fa8PJCgQC3LUSZb4J',
                                SRV_UPLOADS_DIR,
                                perm='elradfmwMT')
            handler = FTPHandler
            handler.authorizer = authorizer
            self.daemon = FTPServer((DEFAULT_HOST, FTP_PORT), handler)
            self.daemon.max_cons = 256
            self.daemon.max_cons_per_ip = 5
            handler.banner = 'ftp-daemon is ready...'
            print(handler.banner)
            self.daemon.serve_forever()
        except Exception as e:
            print('i can' 't run ftp daemon!', e)

    def stop(self):
        self.daemon.close()
        print('ftp daemon stopped')
Beispiel #3
0
class FTPListener(threading.Thread):
    """
    Simple thread to run the FTP Server
    """
    def __init__(self,
                 user=DEFAULT_USER,
                 pwd=DEFAULT_PWD,
                 port=DEFAULT_FTP_PORT,
                 addr=DEFAULT_FTP_ADDR):
        """
        Constructor
        """
        self.user = user
        self.pwd = pwd
        self.port = port
        self.addr = addr
        threading.Thread.__init__(self)

    def run(self):
        """
        Starts the FTP server
        """
        authorizer = DummyAuthorizer()
        authorizer.add_user(self.user, self.pwd, ".", perm="elradfmw")
        handler = OneTimeFTPHandler
        handler.authorizer = authorizer
        self.server = FTPServer((self.addr, self.port), handler)
        self.server.serve_forever()

    def stop(self):
        """
        Stops the FTP server
        """
        if self.server is not None:
            self.server.close()
Beispiel #4
0
class FTPd(threading.Thread):
    def __init__(self, root_dir, address=None, timeout=0.001, dtp_handler=None):
        threading.Thread.__init__(self)
        self.__flag = threading.Event()
        self.__timeout = timeout
        authorizer = DummyAuthorizer()
        authorizer.add_anonymous(root_dir)
        handler = FTPHandler
        handler.authorizer = authorizer
        if dtp_handler is not None:
            handler.dtp_handler = dtp_handler
        self.server = FTPServer(address, handler)

    def start(self):
        self.__flag.clear()
        threading.Thread.start(self)
        self.__flag.wait()

    def run(self):
        self.__flag.set()
        while self.__flag.is_set():
            self.server.serve_forever(timeout=self.__timeout, blocking=False)
        self.server.close_all()
        self.server.close()

    def stop(self):
        self.__flag.clear()
        self.join()
Beispiel #5
0
class FTPListener(threading.Thread):
    """
    Simple thread to run the FTP Server
    """

    def __init__(self, user=DEFAULT_USER, pwd=DEFAULT_PWD, port=DEFAULT_FTP_PORT, addr=DEFAULT_FTP_ADDR):
        """
        Constructor
        """
        self.user = user
        self.pwd = pwd
        self.port = port
        self.addr = addr
        threading.Thread.__init__(self)

    def run(self):
        """
        Starts the FTP server
        """
        authorizer = DummyAuthorizer()
        authorizer.add_user(self.user, self.pwd, ".", perm="elradfmw")
        handler = OneTimeFTPHandler
        handler.authorizer = authorizer
        self.server = FTPServer((self.addr, self.port), handler)
        self.server.serve_forever()

    def stop(self):
        """
        Stops the FTP server
        """
        if self.server is not None:
            self.server.close()
Beispiel #6
0
class FTP:
    def __init__(self, host="127.0.0.1", port=21, blacklist=[], whitelist=[]):
        self.host = host
        self.port = port
        self.blacklist = blacklist
        self.whitelist = whitelist
        # Instantiate a dummy authorizer for managing 'virtual' users
        authorizer = DummyAuthorizer()

        # Define a new user having full r/w permissions and a read-only
        # anonymous user
        authorizer.add_user('user', '12345', '.', perm='elradfmwMT')
        authorizer.add_anonymous(os.getcwd())

        # Instantiate FTP handler class
        handler = FTPHandler
        handler.authorizer = authorizer

        # Define a customized banner (string returned when client connects)
        handler.banner = "pyftpdlib based ftpd ready."

        # Specify a masquerade address and the range of ports to use for
        # passive connections.  Decomment in case you're behind a NAT.
        #handler.masquerade_address = '151.25.42.11'
        #handler.passive_ports = range(60000, 65535)

        # Instantiate FTP server class and listen on 0.0.0.0:2121

        address = (self.host, self.port)
        self.server = FTPServer(address, handler)

        # set a limit for connections
        self.server.max_cons = 256
        self.server.max_cons_per_ip = 5

        # add blacklist
        self.server.blacklist = self.blacklist
        self.server.whitelist = self.whitelist

    # start ftp server
    def start(self):
        self.server.serve_forever()

    def close(self):
        self.server.close()