コード例 #1
0
ファイル: ftp.py プロジェクト: beelives/opencanary
 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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: ftphoney.py プロジェクト: TarllesRoman/honeypot_ftp
    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)
コード例 #4
0
ファイル: ftp.py プロジェクト: alexbredo/honeypot-ftp
			'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.')
コード例 #5
0
ファイル: service.py プロジェクト: softlayer/swftp
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
コード例 #6
0
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
コード例 #7
0
        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()