Reputation: 91
Im am trying to write ip address from a file to another file if they occur more than 30 times using the following code:
#!/usr/bin/python
#open the auth.log file
myFile = open('auth.log','r')
myTxtFile = open('blacklist2.txt','w') #open the Security_Test.txt for writing later
myTxtFile.write('The IP Addresses with more than 30 Attacks are:\n') #prints out a line of text ready for the outcome
ip_attacks = {}
count_attacks = 0
#go through each line of the file and return it to the variable line
for line in myFile.readlines():
#get the IP address
#we are working backwards to avoid the difference of the length of the NT logs
attack_ip = list_of_line[-4]
attack_ip_list= attack_ip.split('port')
attack_address = attack_ip_list[0]
if 'Failed password for' in line:
#print '\'',attack_address,'\''
if ip_attacks.has_key(attack_address):
count_attacks = ip_attacks[attack_address]
count_attacks = count_attacks +1
ip_attacks[attack_address] = count_attacks
#zero out the temporary counter as a precaution
count_attacks =0
else:
ip_attacks[attack_address] = 1
if count_attacks > 30:
myTxtFile.write(ip_attacks)
But it will not write to the text file, the only thing the does write to the text file is the first line 'The IP Addresses with more than 30 Attacks are:' is there anything i am doing wrong here which is not allowing me to write the ip_address from the file to another file??
Example Lines From Log File:
Feb 5 08:25:47 j4-be02 sshd[2130]: Failed password for root from 5.199.133.223 port 50259 ssh2
Feb 5 08:25:55 j4-be02 sshd[2133]: Failed password for root from 5.199.133.223 port 57329 ssh2
Upvotes: 0
Views: 433
Reputation: 2038
Your code is wrong because you reset count_attacks
to zero. I believe you want your if statement to be:
if ip_attacks[attack_address] > 30:
myTxtFile.write(ip_attacks)
instead of:
if count_attacks > 30:
myTxtFile.write(ip_attacks)
EDIT: Btw. I believe that these 3 lines:
count_attacks = ip_attacks[attack_address]
count_attacks = count_attacks +1
ip_attacks[attack_address] = count_attacks
can be replaced with:
ip_attacks[attack_address] += 1
Edit: The complete solution to the problem:
#!/usr/bin/python
from collections import defaultdict
#open the auth.log file
myFile = open('auth.log','r')
myTxtFile = open('blacklist2.txt','w') #open the Security_Test.txt for writing later
myTxtFile.write('The IP Addresses with more than 30 Attacks are:\n') #prints out a line of text ready for the outcome
ip_attacks = defaultdict(int)
count_attacks = 0
#go through each line of the file and return it to the variable line
for line in myFile.readlines():
#get the IP address
#we are working backwards to avoid the difference of the length of the NT logs
attack_ip = list_of_line[-4]
attack_ip_list= attack_ip.split('port')
attack_address = attack_ip_list[0]
if 'Failed password for' in line:
#print '\'',attack_address,'\''
ip_attacks[attack_address] += 1
for key, value in ip_attacks.iteritems():
if value > 30:
myTxtFile.write(key)
Upvotes: 1