Skip to content

Commit

Permalink
Made replay filenames easier to link with logs and vice versa
Browse files Browse the repository at this point in the history
Fixes #180
  • Loading branch information
obilodeau committed Feb 5, 2020
1 parent 53c5fdd commit 490886f
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
15 changes: 12 additions & 3 deletions pyrdp/logging/StatCounter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
# Licensed under the GPLv3 or later.
#

import collections
import time
from logging import LoggerAdapter
from typing import Optional


class STAT:
Expand Down Expand Up @@ -154,10 +156,17 @@ def stop(self):
if self.stats[STAT.TOTAL_OUTPUT] > 0:
self.stats[STAT.CLIENT_SERVER_RATIO] = self.stats[STAT.TOTAL_INPUT] / self.stats[STAT.TOTAL_OUTPUT]

def logReport(self, log: LoggerAdapter):
def logReport(self, log: LoggerAdapter, more_info: Optional[collections.Mapping] = None):
"""
Create an INFO log message to log the Connection report using the keys in self.stats.
:param log: Logger to use to log the report
"""
keys = ", ".join([f"{key}: %({key})s" for key in self.stats.keys()])
log.info(f"Connection report: {keys}", self.stats)
# merge in the additional data if required
if isinstance(more_info, collections.Mapping):
report_data = {**self.stats, **more_info}
else:
report_data = self.stats

keys = ", ".join([f"{key}: %({key})s" for key in report_data.keys()])

log.info(f"Connection report: {keys}", report_data)
6 changes: 5 additions & 1 deletion pyrdp/mitm/RDPMITM.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,11 @@ def __init__(self, mainLogger: SessionLogger, crawlerLogger: SessionLogger, conf

if config.recordReplays:
date = datetime.datetime.now()
replayFileName = "rdp_replay_{}_{}.pyrdp".format(date.strftime('%Y%m%d_%H-%M-%S'), date.microsecond // 1000)
replayFileName = "rdp_replay_{}_{}_{}.pyrdp"\
.format(date.strftime('%Y%m%d_%H-%M-%S'),
date.microsecond // 1000,
self.log.sessionID)
self.recorder.setRecordFilename(replayFileName)
self.recorder.addTransport(FileLayer(self.config.replayDir / replayFileName))

if config.enableCrawler:
Expand Down
6 changes: 5 additions & 1 deletion pyrdp/mitm/TCPMITM.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,11 @@ def onClientDisconnection(self, reason):
self.statCounter.stop()
self.recordConnectionClose()
self.log.info("Client connection closed. %(reason)s", {"reason": reason.value})
self.statCounter.logReport(self.log)
if self.recorder.recordFilename:
self.statCounter.logReport(self.log, {"replayFilename":
self.recorder.recordFilename})
else:
self.statCounter.logReport(self.log)
self.serverConnector.close()
self.server.disconnect(True)

Expand Down
8 changes: 8 additions & 0 deletions pyrdp/recording/recorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,18 @@ def __init__(self, transports: List[LayerChainItem]):
}

self.topLayers = []
self.recordFilename = None

for transport in transports:
self.addTransport(transport)

def setRecordFilename(self, filename: str):
"""
Sets the filename used for the session recording.
:param filename: the filename
"""
self.recordFilename = filename

def addTransport(self, transportLayer: LayerChainItem):
player = PlayerLayer()
player.setPrevious(transportLayer)
Expand Down

0 comments on commit 490886f

Please sign in to comment.