#!/usr/bin/env python # # Copyright (C) 2003-2011 Upi Tamminen # import getopt import os import struct import sys import time OP_OPEN, OP_CLOSE, OP_WRITE, OP_EXEC = 1, 2, 3, 4 TYPE_INPUT, TYPE_OUTPUT, TYPE_INTERACT = 1, 2, 3 def playlog(fd, settings): ssize = struct.calcsize(" settings["maxdelay"]: sleeptime = settings["maxdelay"] if settings["maxdelay"] > 0: time.sleep(sleeptime) prevtime = curtime if settings["colorify"] and color: stdout.write(color) stdout.write(data) if settings["colorify"] and color: stdout.write(b"\033[0m") color = None sys.stdout.flush() elif str(tty) == str(currtty) and op == OP_CLOSE: break def help(brief=0): print( "Usage: %s [-bfhi] [-m secs] [-w file] ...\n" % os.path.basename(sys.argv[0]) ) if not brief: print(" -f keep trying to read the log until it's closed") print( " -m maximum delay in seconds, to avoid" + " boredom or fast-forward\n" + " to the end. (default is 3.0)" ) print(" -i show the input stream instead of output") print(" -b show both input and output streams") print( " -c colorify the output stream based on what streams are being received" ) print(" -h display this help\n") sys.exit(1) if __name__ == "__main__": settings = { "tail": 0, "maxdelay": 3.0, "input_only": 0, "both_dirs": 0, "colorify": 0, } try: optlist, args = getopt.getopt(sys.argv[1:], "fhibcm:w:", ["help"]) except getopt.GetoptError as error: print("Error: %s\n" % error) help() options = [x[0] for x in optlist] if "-b" in options and "-i" in options: print("Error: -i and -b cannot be used together. Please select only one flag") sys.exit(1) for o, a in optlist: if o == "-f": settings["tail"] = 1 elif o == "-m": settings["maxdelay"] = float(a) # takes decimals elif o == "-i": settings["input_only"] = 1 elif o == "-b": settings["both_dirs"] = 1 elif o in ["-h", "--help"]: help() elif o == "-c": settings["colorify"] = 1 if len(args) < 1: help() try: for logfile in args: logfd = open(logfile, "rb") playlog(logfd, settings) except OSError: print("\n\n[!] Couldn't open log file (%s)!" % logfile) sys.exit(2)