2013-11-29 6 views
1

Я просто посмотрел на регулярное выражение, и я немного смущен. Я написал программу, которая анализирует файл «auth.log» в режиме реального времени, построчно. Теперь мне нужно различную информацию из записей.Извлечение IP из строки с Python

if "sshd" in line 
    if "Accepted password" in line 
     REGEX Query to get the username and ip 
    elif "session closed" in line 
     REGEX Query to get the username 

Это те записи в файле журнала:

Nov 29 13:20:33 Debian sshd[4043]: Accepted password for patrick from ::1 port 50864 ssh2 
Nov 29 13:20:33 Debian sshd[4043]: pam_unix(sshd:session): session opened for user patrick by (uid=0) 
Nov 29 13:21:23 Debian sshd[4043]: pam_unix(sshd:session): session closed for user patrick 

Какой инструмент я должен выбрать, чтобы сделать это? исследование?

+0

[Начать чтение руководства] (http://docs.python.org/3/library/re.html). Это не займет много времени, поверьте мне. – HamZa

+2

Вы должны сделать хотя бы попытку, когда вы застряли, задайте здесь настоящую проблему. – scriptmonster

ответ

1

Поскольку запись журнала сильно отформатирована, возможно, не нужно использовать регулярное выражение:

$ cat t.txt 
Nov 29 13:20:33 Debian sshd[4043]: Accepted password for patrick from ::1 port 50864 ssh2 
Nov 29 13:20:33 Debian sshd[4043]: pam_unix(sshd:session): session opened for user patrick by (uid=0) 
Nov 29 13:21:23 Debian sshd[4043]: pam_unix(sshd:session): session closed for user patrick 
$ cat t.py 
#/usr/bin/env python 
for line in open('t.txt'): 
    if "sshd" in line: 
     if "Accepted password" in line: 
      print "User: ", line.split()[8] 
      print "IP: ", line.split()[10] 
     if "session closed" in line: 
      print "User: ", line.split()[10] 
$ python t.py 
User: patrick 
IP: ::1 
User: patrick 

конечно, вы должны быть более осторожными с линиями как if "sshd" in line:, но вы получите идею.

0

Вот как я считаю, IPv6 и IPv4-адрес:

import re 
ip6 = '''(?:(?x)(?:(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6})| 
(?:(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5})| 
(?:(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4})| 
(?:(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3})| 
(?:(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2})| 
(?:(?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1})| 
(?:(?:(?:[0-9a-f]{1,4}:){1,7}|:):)| 
(?::(?::[0-9a-f]{1,4}){1,7})| 
(?:(?:(?:(?:[0-9a-f]{1,4}:){6})(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))| 
(?:(?:(?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))| 
(?:(?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?:(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?:(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?:(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?:(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?:(?:(?:[0-9a-f]{1,4}:){1,5}|:):(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})| 
(?::(?::[0-9a-f]{1,4}){1,5}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})) 
''' 
ip4 = '(?:[12]?\\d?\\d\\.){3}[12]?\\d?\\d' 
ip = re.findall(ip4 + '|' + ip6, "111:111::1 1.1.1.1") 

Я получил регулярное выражение для IPv6 из другого сайта Regular expression that matches valid IPv6 addresses

Смежные вопросы