Разделить IP-адрес из списка или строки - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь проанализировать файл журнала в python 3.7. У меня есть такие записи:

2020-07-13 18:05:43.332880;sshd;1144;logon root from 192.168.179.9 started

2020-07-13 18:10:12.332880;sshd;1854;logon admin from 192.168.179.3 finished

2020-07-14 03:17:02.332880;sshd;1169;logon admin from 10.0.1.5 failed

2020-07-14 03:19:30.332880;sshd;1297;logon root from 10.0.1.3 failed

Я прочитал файл в python как таковой:

def readLog(fname):
    """ Read log-events from file """
    lines = []
    file = open("<pathname>", encoding = 'utf-8')
    lines = file.read()#.split('\n')
    file.close()

return lines # returns the logfile

Мне нужно получить сводку в виде вывода, выглядящего следующим образом:

day:2020-07-01,prog:SSH,success:12,failure:13,ip:1.2.3.4

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

    events = readLog(logFname)
    for event in events:
            event.split(" ",4)
            print(event)
            #ipList=[]
            #ipList.append(event)

IP после 4-го пробела, но мне нужен только ip, поэтому только с 4-го пробела до 5-го. Не знаю, как это сделать. Но сначала мне нужно заставить работать сплит, а затем я могу попытаться решить детали. Я посмотрел на inte rnet и нашел несколько решений (см. Источники ниже), но мне не удалось их правильно использовать или заставить работать. Я пробовал что-то вроде этого:

events = readLog(logFname)
for event in events:
    [i.split(" ", 4) for i in event]

Надеюсь, кто-то может мне с этим помочь, спасибо. Источники:

Как разделить элементы списка?

Python Распознавание IP в строке

http://www.datasciencemadesimple.com/remove-spaces-in-python/

1 Ответ

0 голосов
/ 05 августа 2020

Это должно дать вам IP, вы можете повторить с разными индексами, чтобы получить разные данные из строки

events = readLog (logFname) для события в событиях: [i.split ("") [4 ] для i в событии]

...