Daniel
Daniel

Reputation: 91

Python Won't write to text file

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

Answers (1)

Maecky
Maecky

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

Related Questions