mirror of
https://github.com/aljazceru/cowrie.git
synced 2025-12-17 22:14:19 +01:00
Issue #16:
Last 25 users connecting to honeypot will be seen using 'last'. anydbm database, logs all in a last-like format. (by jfbethlehem) git-svn-id: https://kippo.googlecode.com/svn/trunk@140 951d7100-d841-11de-b865-b3884708a8e2
This commit is contained in:
@@ -11,4 +11,5 @@ __all__ = [
|
|||||||
'apt',
|
'apt',
|
||||||
'dice',
|
'dice',
|
||||||
'adduser',
|
'adduser',
|
||||||
|
'last',
|
||||||
]
|
]
|
||||||
|
|||||||
24
kippo/commands/last.py
Normal file
24
kippo/commands/last.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# Copyright (c) 2009 Upi Tamminen <desaster@gmail.com>
|
||||||
|
# See the COPYRIGHT file for more information
|
||||||
|
|
||||||
|
from kippo.core.honeypot import HoneyPotCommand
|
||||||
|
from kippo.core.fs import *
|
||||||
|
from kippo.core.config import config
|
||||||
|
from kippo.core import utils
|
||||||
|
import stat, time, anydbm
|
||||||
|
|
||||||
|
commands = {}
|
||||||
|
|
||||||
|
class command_last(HoneyPotCommand):
|
||||||
|
def call(self):
|
||||||
|
db = anydbm.open('%s/lastlog.db' % \
|
||||||
|
config().get('honeypot', 'data_path'), 'c')
|
||||||
|
count = 0
|
||||||
|
for k in sorted(db.iterkeys(), reverse=True):
|
||||||
|
self.writeln(db[k])
|
||||||
|
count += 1
|
||||||
|
if count >= 25:
|
||||||
|
break
|
||||||
|
commands['/usr/bin/last'] = command_last
|
||||||
|
|
||||||
|
# vim: set sw=4 et:
|
||||||
@@ -13,7 +13,7 @@ from zope.interface import implements
|
|||||||
from copy import deepcopy, copy
|
from copy import deepcopy, copy
|
||||||
import sys, os, random, pickle, time, stat, shlex, anydbm
|
import sys, os, random, pickle, time, stat, shlex, anydbm
|
||||||
|
|
||||||
from kippo.core import ttylog, fs
|
from kippo.core import ttylog, fs, utils
|
||||||
from kippo.core.config import config
|
from kippo.core.config import config
|
||||||
import commands
|
import commands
|
||||||
|
|
||||||
@@ -160,8 +160,19 @@ class HoneyPotProtocol(recvline.HistoricRecvLine):
|
|||||||
'\x03': self.handle_CTRL_C,
|
'\x03': self.handle_CTRL_C,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def lastlogExit(self):
|
||||||
|
starttime = time.strftime('%a %b %d %H:%M',
|
||||||
|
time.localtime(self.logintime))
|
||||||
|
endtime = time.strftime('%H:%M',
|
||||||
|
time.localtime(time.time()))
|
||||||
|
duration = utils.durationHuman(time.time() - self.logintime)
|
||||||
|
utils.addToLastlog('root\tpts/0\t%s\t%s - %s (%s)' % \
|
||||||
|
(self.clientIP, starttime, endtime, duration))
|
||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
recvline.HistoricRecvLine.connectionLost(self, reason)
|
recvline.HistoricRecvLine.connectionLost(self, reason)
|
||||||
|
self.lastlogExit()
|
||||||
|
|
||||||
# not sure why i need to do this:
|
# not sure why i need to do this:
|
||||||
del self.fs
|
del self.fs
|
||||||
del self.commands
|
del self.commands
|
||||||
|
|||||||
41
kippo/core/utils.py
Normal file
41
kippo/core/utils.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Copyright (c) 2010 Upi Tamminen <desaster@gmail.com>
|
||||||
|
# See the COPYRIGHT file for more information
|
||||||
|
|
||||||
|
import time, anydbm
|
||||||
|
from kippo.core.config import config
|
||||||
|
|
||||||
|
def addToLastlog(message):
|
||||||
|
db = anydbm.open('%s/lastlog.db' % \
|
||||||
|
config().get('honeypot', 'data_path'), 'c')
|
||||||
|
db[str(len(db)+1)] = message
|
||||||
|
db.close()
|
||||||
|
|
||||||
|
def durationHuman(seconds):
|
||||||
|
seconds = long(round(seconds))
|
||||||
|
minutes, seconds = divmod(seconds, 60)
|
||||||
|
hours, minutes = divmod(minutes, 60)
|
||||||
|
days, hours = divmod(hours, 24)
|
||||||
|
years, days = divmod(days, 365.242199)
|
||||||
|
|
||||||
|
sdays = str(days)
|
||||||
|
syears = str(years)
|
||||||
|
sseconds = str(seconds).rjust(2, '0')
|
||||||
|
sminutes = str(minutes).rjust(2, '0')
|
||||||
|
shours = str(hours).rjust(2, '0')
|
||||||
|
|
||||||
|
duration = []
|
||||||
|
if years > 0:
|
||||||
|
duration.append('%s year' % syears + 's'*(years != 1) + ' ')
|
||||||
|
else:
|
||||||
|
if days > 0:
|
||||||
|
duration.append('%s day' % sdays + 's'*(days != 1) + ' ')
|
||||||
|
if hours > 0:
|
||||||
|
duration.append('%s:' % shours)
|
||||||
|
if minutes >= 0:
|
||||||
|
duration.append('%s:' % sminutes)
|
||||||
|
if seconds >= 0:
|
||||||
|
duration.append('%s' % sseconds)
|
||||||
|
|
||||||
|
return ''.join(duration)
|
||||||
|
|
||||||
|
# vim: set sw=4 et:
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
root pts/7 10.94.2.240 Thu Apr 1 07:39 - 08:03 (00:24)
|
|
||||||
|
|
||||||
wtmp begins Thu Apr 1 07:39:20 2010
|
|
||||||
Reference in New Issue
Block a user