def getService(self): p = Portal(FTPRealm(FTP_PATH), [DenyAllAccess()]) f = FTPFactory(p) f.protocol = LoggingFTP f.welcomeMessage = self.banner f.canaryservice = self return internet.TCPServer(self.port, f, interface=self.listen_addr)
def ftp_MKD(self, path): FTP.sendLine(self, '257 Folder created') def ftp_RMD(self, path): FTP.sendLine(self, '250 Requested File Action Completed OK') # END HACKS def logIt(self, command, successful): f = open('/root/ftp.log', 'a') data = { 'timestamp': int(time.time()), 'sourceIPv4Address': str(self.transport.getPeer().host), 'command': command, 'success': successful, 'session': self.session } f.write(json.dumps(data) + ',\n') f.close() try: factory = FTPFactory(Portal('pub/'), [FilePasswordDB('/passwd')]) factory.protocol = SimpleFtpProtocol reactor.listenTCP(21, factory) print('Server listening on Port %s (Plain) and on %s (SSL).' % (21, 990)) reactor.run() except Exception as e: print(e)
'type': type, 'command': command, 'success': successful, 'session': self.session } if self.myownhost: data['destinationIPv4Address'] = str(self.myownhost.host) data['destinationTransportPort'] = self.myownhost.port handler.handle(data) try: factory = FTPFactory( Portal(MyFTPRealm(config.pubdir)), [FilePasswordDB(config.passwdfile)] ) factory.protocol = SimpleFtpProtocol reactor.listenTCP(config.port, factory) reactor.listenSSL( config.sslport, factory, ssl.DefaultOpenSSLContextFactory( config.sslcertprivate, config.sslcertpublic )) log.info('Server listening on Port %s (Plain) and on %s (SSL).' % (config.port, config.sslport)) reactor.run() except Exception as e: log.error(str(e)); exit(-1) log.info('Server shutdown.')
def makeService(options): """ Makes a new swftp-ftp service. The only option is the config file location. See CONFIG_DEFAULTS for list of configuration options. """ from twisted.protocols.ftp import FTPFactory from twisted.cred.portal import Portal from swftp.ftp.server import SwftpFTPProtocol from swftp.realm import SwftpRealm from swftp.auth import SwiftBasedAuthDB from swftp.utils import ( log_runtime_info, GLOBAL_METRICS, parse_key_value_config) print('Starting SwFTP-ftp %s' % VERSION) c = get_config(options['config_file'], options) ftp_service = service.MultiService() # Add statsd service if c.get('ftp', 'log_statsd_host'): try: from swftp.statsd import makeService as makeStatsdService makeStatsdService( c.get('ftp', 'log_statsd_host'), c.getint('ftp', 'log_statsd_port'), sample_rate=c.getfloat('ftp', 'log_statsd_sample_rate'), prefix=c.get('ftp', 'log_statsd_metric_prefix') ).setServiceParent(ftp_service) except ImportError: sys.stderr.write('Missing Statsd Module. Requires "txstatsd" \n') if c.get('ftp', 'stats_host'): from swftp.report import makeService as makeReportService known_fields = [ 'command.login', 'command.logout', 'command.makeDirectory', 'command.removeDirectory', 'command.removeFile', 'command.rename', 'command.access', 'command.stat', 'command.list', 'command.openForReading', 'command.openForWriting', ] + GLOBAL_METRICS makeReportService( c.get('ftp', 'stats_host'), c.getint('ftp', 'stats_port'), known_fields=known_fields ).setServiceParent(ftp_service) authdb = SwiftBasedAuthDB( c.get('ftp', 'auth_url'), global_max_concurrency=c.getint('ftp', 'num_persistent_connections'), max_concurrency=c.getint('ftp', 'num_connections_per_session'), timeout=c.getint('ftp', 'connection_timeout'), extra_headers=parse_key_value_config(c.get('ftp', 'extra_headers')), verbose=c.getboolean('ftp', 'verbose'), rewrite_scheme=c.get('ftp', 'rewrite_storage_scheme'), rewrite_netloc=c.get('ftp', 'rewrite_storage_netloc'), ) ftpportal = Portal(SwftpRealm()) ftpportal.registerChecker(authdb) ftpfactory = FTPFactory(ftpportal) protocol = SwftpFTPProtocol protocol.maxConnectionsPerUser = c.getint('ftp', 'sessions_per_user') ftpfactory.protocol = protocol ftpfactory.welcomeMessage = c.get('ftp', 'welcome_message') ftpfactory.allowAnonymous = False ftpfactory.timeOut = c.getint('ftp', 'session_timeout') signal.signal(signal.SIGUSR1, log_runtime_info) signal.signal(signal.SIGUSR2, log_runtime_info) internet.TCPServer( c.getint('ftp', 'port'), ftpfactory, interface=c.get('ftp', 'host')).setServiceParent(ftp_service) return ftp_service
def makeService(options): """ Makes a new swftp-ftp service. The only option is the config file location. See CONFIG_DEFAULTS for list of configuration options. """ from twisted.protocols.ftp import FTPFactory from twisted.cred.portal import Portal from swftp.ftp.server import SwftpFTPProtocol from swftp.realm import SwftpRealm from swftp.auth import SwiftBasedAuthDB from swftp.utils import (log_runtime_info, GLOBAL_METRICS, parse_key_value_config) print('Starting SwFTP-ftp %s' % VERSION) c = get_config(options['config_file'], options) ftp_service = service.MultiService() # Add statsd service if c.get('ftp', 'log_statsd_host'): try: from swftp.statsd import makeService as makeStatsdService makeStatsdService( c.get('ftp', 'log_statsd_host'), c.getint('ftp', 'log_statsd_port'), sample_rate=c.getfloat('ftp', 'log_statsd_sample_rate'), prefix=c.get( 'ftp', 'log_statsd_metric_prefix')).setServiceParent(ftp_service) except ImportError: sys.stderr.write('Missing Statsd Module. Requires "txstatsd" \n') if c.get('ftp', 'stats_host'): from swftp.report import makeService as makeReportService known_fields = [ 'command.login', 'command.logout', 'command.makeDirectory', 'command.removeDirectory', 'command.removeFile', 'command.rename', 'command.access', 'command.stat', 'command.list', 'command.openForReading', 'command.openForWriting', ] + GLOBAL_METRICS makeReportService( c.get('ftp', 'stats_host'), c.getint('ftp', 'stats_port'), known_fields=known_fields).setServiceParent(ftp_service) authdb = SwiftBasedAuthDB( c.get('ftp', 'auth_url'), global_max_concurrency=c.getint('ftp', 'num_persistent_connections'), max_concurrency=c.getint('ftp', 'num_connections_per_session'), timeout=c.getint('ftp', 'connection_timeout'), extra_headers=parse_key_value_config(c.get('ftp', 'extra_headers')), verbose=c.getboolean('ftp', 'verbose'), rewrite_scheme=c.get('ftp', 'rewrite_storage_scheme'), rewrite_netloc=c.get('ftp', 'rewrite_storage_netloc'), ) ftpportal = Portal(SwftpRealm()) ftpportal.registerChecker(authdb) ftpfactory = FTPFactory(ftpportal) protocol = SwftpFTPProtocol protocol.maxConnectionsPerUser = c.getint('ftp', 'sessions_per_user') ftpfactory.protocol = protocol ftpfactory.welcomeMessage = c.get('ftp', 'welcome_message') ftpfactory.allowAnonymous = False ftpfactory.timeOut = c.getint('ftp', 'session_timeout') signal.signal(signal.SIGUSR1, log_runtime_info) signal.signal(signal.SIGUSR2, log_runtime_info) internet.TCPServer(c.getint('ftp', 'port'), ftpfactory, interface=c.get('ftp', 'host')).setServiceParent(ftp_service) return ftp_service
if IMessageDelivery in interfaces: return (IMessageDelivery, ConsoleMessageDelivery(), lambda: None) raise NotImplementedError( "Unable to provide avatar for interfaces provided ({})".format( interfaces)) log = Logger("amcrest") predicate = LogLevelFilterPredicate(LogLevel.warn) predicate.setLogLevelForNamespace("amcrest", LogLevel.debug) globalLogPublisher.addObserver( FilteringLogObserver(textFileLogObserver(sys.stderr), (predicate, ))) portal = Portal(AmcrestRealm(), [ FilePasswordDB( os.path.join(os.path.dirname(os.path.abspath(__file__)), "passwords.txt")) ]) ftpfactory = FTPFactory(portal) ftpfactory.allowAnonymous = False ftpfactory.protocol = MonitoredFTP hafactory = HAFactory() reactor.listenTCP(2121, ftpfactory) reactor.listenTCP(2525, ConsoleSMTPFactory(portal)) reactor.listenTCP(2626, hafactory, interface='127.0.0.1') reactor.run()