Python находит количество атак в день - PullRequest
0 голосов
/ 29 февраля 2012

Как узнать количество атак в день из файла журнала примера?Мне бы хотелось, чтобы он подсказывал обо всем, что начинается с ошибочного пароля.

Я получил большую часть кода, но он требует работы, и я не совсем уверен, что играл с ним несколько часов, но не повезло.

$ myFile = open('auth','r')

#! /bin/python

att_dic = {}    
count_attack = 0
print 'Start of Debug messages'

for line in myFile.readlines():
    lineList2 = line.split(']')        
    att_list = lineList2[0]
    att_list2 = att_list.split('[')
    attack = att_list2[1]
    if att_dic.has_key(attack):
        count_attack = att_dic[attack]
        count_attack = count_attack +1
        att_dic[attack] = count_attack
        count_attack = 0
    else:
        att_dic[attack] = 1
    else:
        lineList2 = line.split(']')
        att_list = lineList2[1]
        att_list2 = att_list.split('[')
        attack = att_list2[0]

    if att_dic.has_key(attack):
        count_att = att_dic[ip]
        count_attack = count_att +1
        att_dic[attack] = count_attack
        count_attack =0
    else:
        att_dic[attack] = 1

    print attack        

print '\nEnd of Debug messages\n\n'
print 'Answers:\n'
print 'Number of attacks per day:'
for att_items in att_dic.keys():
print att_items ,' has', att_dic[att_items] , ' attacks per day '

Пример файла журнала

Jan 10 09:32:07 j4-be03 sshd[3876]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.241.173.35  user=root   
Jan 10 09:32:09 j4-be03 sshd[3876]: Failed password for root from 218.241.173.35 port 47084 ssh2
Jan 10 09:32:17 j4-be03 sshd[3879]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.241.173.35  user=root
Jan 10 09:32:19 j4-be03 sshd[3879]: Failed password for root from 218.241.173.35 port 47901 ssh2

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Я думаю, что вы пытаетесь просто подсчитать количество уникальных атак в файле журнала.Есть много способов сделать это, но, следуя духу вашего сплит-кода, это гораздо более простое решение:

FIN = open("auth")
A = dict()

for line in FIN:
    if "authentication failure" in line:
        host = [x for x in line.split() if "rhost" in x]
        host = host[0].split('=')[1]
        if host not in A: A[host] = 0
        A[host] += 1

print "%i unique attacks: " % len(A)
for ip in A:
    print " %s attacks from %s " % (A[ip],ip)

Это дает в качестве вывода:

1 unique attacks: 
 2 attacks from 218.241.173.35 

Другие способы?

Лично для такой проблемы я бы посмотрел на pyparsing , так как ваши правила будут усложняться по мере того, как вы будете совершенствовать то, что выищем.

0 голосов
/ 10 марта 2012

Я сделал это, я использовал dict, и подсчет нашел дни и посчитал количество атак в день.в любом случае спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...