2014-11-04 10:31:26 +00:00
|
|
|
#
|
2014-11-17 19:05:26 +00:00
|
|
|
# this module uses the dblog feature to create a JSON logfile
|
2014-11-04 10:31:26 +00:00
|
|
|
# ..so not exactly a dblog.
|
|
|
|
#
|
|
|
|
|
|
|
|
import datetime
|
|
|
|
import uuid
|
|
|
|
import json
|
|
|
|
|
|
|
|
from kippo.core import dblog
|
|
|
|
from twisted.enterprise import adbapi
|
|
|
|
from twisted.internet import defer
|
|
|
|
from twisted.python import log
|
|
|
|
|
|
|
|
class DBLogger(dblog.DBLogger):
|
2014-11-17 19:05:26 +00:00
|
|
|
|
2014-11-04 10:31:26 +00:00
|
|
|
def start(self, cfg):
|
|
|
|
self.outfile = file(cfg.get('database_jsonlog', 'logfile'), 'a')
|
|
|
|
|
2014-11-17 19:05:26 +00:00
|
|
|
def write(self, session, logentry):
|
|
|
|
_meta = {
|
|
|
|
'session' : session,
|
|
|
|
'sensor' : self.sensor,
|
|
|
|
'timestamp' : datetime.datetime.utcnow().isoformat() + 'Z'
|
|
|
|
}
|
|
|
|
logentry.update( _meta )
|
|
|
|
json.dump( logentry, self.outfile )
|
2014-11-04 10:31:26 +00:00
|
|
|
self.outfile.write( '\n' )
|
|
|
|
self.outfile.flush()
|
|
|
|
|
|
|
|
def createSession(self, peerIP, peerPort, hostIP, hostPort):
|
2014-11-04 10:42:08 +00:00
|
|
|
sid = uuid.uuid4().hex
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'New connection: %s:%s' % (peerIP, peerPort), 'src_ip' : peerIP }
|
|
|
|
self.sensor = self.getSensor() or hostIP
|
|
|
|
self.write(sid, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
return sid
|
|
|
|
|
|
|
|
def handleConnectionLost(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message': 'Connection lost' }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleLoginFailed(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'Login failed [%s/%s]' % (args['username'], args['password']), 'username' : args['username'], 'password' : args['password'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleLoginSucceeded(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'Login succeeded [%s/%s]' % (args['username'], args['password']), 'username' : args['username'], 'password' : args['password'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleCommand(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'command [%s]' % (args['input'],), 'command' : args['input'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleUnknownCommand(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'unknown command [%s]' % (args['input'],), 'command' : args['input'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleInput(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'input [%s] @%s' % (args['input'], args['realm']), 'command' : args['input'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleTerminalSize(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'Terminal size: %sx%s' % (args['width'], args['height']) }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleClientVersion(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'Client version: [%s]' % (args['version']), 'version' : args['version'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
def handleFileDownload(self, session, args):
|
2014-11-17 19:05:26 +00:00
|
|
|
logentry = { 'message' : 'File download: [%s] -> %s' % (args['url'], args['outfile']), 'url' : args['url'] }
|
|
|
|
self.write( session, logentry )
|
2014-11-04 10:31:26 +00:00
|
|
|
|
|
|
|
# vim: set sw=4 et:
|