123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import time, sys, getopt, os, random
- ip = ""
- login = "admin"
- password = "12345"
- def usage():
- print "Usage:\r\n\
- checklogfile.py <filename> - to check local log file\r\n\
- checklogfile.py -d <ip-address> - to download and check log file"
- def parse(path):
- f = open(path)
- lines = [line.rstrip('\n') for line in f]
-
- #Remove UTF8 BOM
- lines[0] = lines[0].replace('\xEF\xBB\xBF','')
- #Remove empty lines
- for i in range(len(lines)-1, len(lines)-10, -1):
- #print "str -", i, lines[-i]
- if lines[i] == " "*118+"\x0D":
- del lines[i]
- print "len: ", len(lines)
- return lines
- def do_login():
- os.system("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt -d \"login=%s&password=%s\" http://%s/login.cgi > /dev/null" % (login, password, ip))
- def log_download(path):
- print "Downloading log file..."
- if 0 == os.system("curl -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=all&_=%s\" --output %s --progress" % (ip, random.randint(0, 0xFFFF), path)):
- return True
- else:
- return False
- def check(path):
- lines = parse(path)
-
- lastptr = 0
- for i in range(len(lines)):
- #i = lines.index(s)
- s = lines[i]
- print "\rProcessing: %d%%" %( (i+1)*100/len(lines)),
- #Check if string in valid format
- if len(s) > 119 or s[0] != '"' or s.count('"') != 2 or s.count('\x00') != 0:
- print "\nError. Log file is corrupted:"
- print "Wrong string (at index %d) : %s" %(i+1, s)
- return False
- strdate = s.replace('"','').split(";")[3].rstrip()
- #print strdate
- newdate = time.strptime(strdate, "%d.%m.%y %H:%M:%S")
- if i != 0:
- if newdate < lastdate:
- if lastptr == 0:
- lastptr = i+1
- else:
- print "\nError. Wrong message order!"
- print "Look at index:", i+1
-
- lastdate = newdate
-
- print "\nLast message index:", lastptr
- print "Log file is OK"
- return True
-
- def main():
- global ip
- try:
- opts, args = getopt.getopt(sys.argv[1:], "hd:", \
- ["help", "download="])
- except getopt.GetoptError:
- usage()
- sys.exit(2)
-
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- if opt in ("-d", "--download"):
- ip = arg
- if ip == "" and len(sys.argv) < 2:
- usage()
- sys.exit(2)
- if ip == "":
- path = sys.argv[-1]
- else:
- path = "/tmp/checklog.csv"
- do_login()
- if not log_download(path):
- print "Download error"
- sys.exit(2)
-
- check(path)
- if __name__ == "__main__":
- main()
|