This commit is contained in:
Michel Oosterhof
2016-07-11 19:09:46 +04:00
parent 0816f0bbe0
commit d5e66564b5

View File

@ -1,3 +1,4 @@
# -*- test-case-name: cowrie.test.protocol -*-
# Copyright (c) 2009-2014 Upi Tamminen <desaster@gmail.com> # Copyright (c) 2009-2014 Upi Tamminen <desaster@gmail.com>
# See the COPYRIGHT file for more information # See the COPYRIGHT file for more information
@ -8,21 +9,19 @@ This module contains ...
import os import os
import time import time
import socket import socket
import hashlib
from twisted.python import failure, log from twisted.python import failure, log
from twisted.internet import error from twisted.internet import error
from twisted.protocols.policies import TimeoutMixin from twisted.protocols.policies import TimeoutMixin
from twisted.conch import recvline from twisted.conch import recvline
from twisted.conch.ssh import session
from twisted.conch.insults import insults from twisted.conch.insults import insults
from cowrie.core import honeypot from cowrie.core import honeypot
from cowrie.core import ttylog
from cowrie.core import utils from cowrie.core import utils
class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin): class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin):
""" """
Base protocol for interactive and non-interactive use
""" """
def __init__(self, avatar): def __init__(self, avatar):
@ -32,6 +31,13 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin):
self.hostname = avatar.server.hostname self.hostname = avatar.server.hostname
self.fs = avatar.server.fs self.fs = avatar.server.fs
self.pp = None self.pp = None
self.logintime = None
self.realClientIP = None
self.realClientPort = None
self.clientVersion = None
self.kippoIP = None
self.clientIP = None
if self.fs.exists(avatar.avatar.home): if self.fs.exists(avatar.avatar.home):
self.cwd = avatar.avatar.home self.cwd = avatar.avatar.home
else: else:
@ -50,6 +56,7 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin):
def logDispatch(self, *msg, **args): def logDispatch(self, *msg, **args):
""" """
Send log directly to factory, avoiding normal log dispatch
""" """
transport = self.terminal.transport.session.conn.transport transport = self.terminal.transport.session.conn.transport
args['sessionno'] = transport.transport.sessionno args['sessionno'] = transport.transport.sessionno
@ -160,6 +167,7 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin):
def lineReceived(self, line): def lineReceived(self, line):
""" """
Line Received
""" """
self.resetTimeout() self.resetTimeout()
if len(self.cmdstack): if len(self.cmdstack):
@ -179,6 +187,7 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol, TimeoutMixin):
def uptime(self): def uptime(self):
""" """
Uptime
""" """
transport = self.terminal.transport.session.conn.transport transport = self.terminal.transport.session.conn.transport
r = time.time() - transport.factory.starttime r = time.time() - transport.factory.starttime
@ -261,7 +270,7 @@ class HoneyPotInteractiveProtocol(HoneyPotBaseProtocol, recvline.HistoricRecvLin
this logs out when connection times out this logs out when connection times out
""" """
self.terminal.write( 'timed out waiting for input: auto-logout\n' ) self.terminal.write( 'timed out waiting for input: auto-logout\n' )
HoneypotBaseProtocol.timeoutConnection() HoneyPotBaseProtocol.timeoutConnection()
def lastlogExit(self): def lastlogExit(self):