[pyar] Parser almacena cadenas en diccionario

Daniel Moisset dmoisset en machinalis.com
Mie Nov 14 18:57:28 ART 2012


2012/11/14 Alberto Benítez <freestyle10 en gmail.com>

> Gracias por la solución, no consigo hacerla funcionar con todos los
> parámetros que quiero recoger
>
> Feb 20 23:27:11 ubuntu kernel: [1988916.899165] iptables: IN=eth0 OUT= MAC=00:00:00:00:00:00:00:
> 00:00:00:00:00:00:00 SRC=192.168.0.3 DST=192.168.0.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=30541
> DF PROTO=TCP SPT=60148 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
>
>
Para este caso, capaz con expresiones regulares vas bien:

>>> s = "Feb 20 23:27:11 ubuntu kernel: [1988916.899165] iptables: IN=eth0
OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=192.168.0.3
DST=192.168.0.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=30541 DF PROTO=TCP
SPT=60148 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0"
>>> import re
>>> r = re.compile("([A-Z]+)=([^ ]*)")
>>> r.findall(s)
[('IN', 'eth0'),
 ('OUT', ''),
 ('MAC', '00:00:00:00:00:00:00:00:00:00:00:00:00:00'),
 ('SRC', '192.168.0.3'),
 ('DST', '192.168.0.1'),
 ('LEN', '60'),
 ('TOS', '0x10'),
 ('PREC', '0x00'),
 ('TTL', '64'),
 ('ID', '30541'),
 ('PROTO', 'TCP'),
 ('SPT', '60148'),
 ('DPT', '22'),
 ('WINDOW', '5840'),
 ('RES', '0x00'),
 ('URGP', '0')]

Ahi lo tenes como lista de pares. Por supuesto tambien podes

>>> dict(r.findall(s))
{'DPT': '22',
 'DST': '192.168.0.1',
 'ID': '30541',
 'IN': 'eth0',
 'LEN': '60',
 'MAC': '00:00:00:00:00:00:00:00:00:00:00:00:00:00',
 'OUT': '',
 'PREC': '0x00',
 'PROTO': 'TCP',
 'RES': '0x00',
 'SPT': '60148',
 'SRC': '192.168.0.3',
 'TOS': '0x10',
 'TTL': '64',
 'URGP': '0',
 'WINDOW': '5840'}


Saludos,
    D.



> Quizás sera mejor que me programa algún modulo a mano, se les ocurre algo?
>
> Saludos
>
>
>
>
> El 9 de noviembre de 2012 14:26, Ezequiel Garcia <elezegarcia en gmail.com>escribió:
>
> 2012/11/9 Alberto Benítez <freestyle10 en gmail.com>:
>> > Buenas,
>> >
>> > Estoy tratando de parsear lineas del log de ip tables, pongo un ejemplo
>> >
>> > Feb 20 23:27:11 ubuntu kernel: [1988916.899165] iptables: IN=eth0 OUT=
>> > MAC=00:00:00:00:00:00:00:
>> > 00:00:00:00:00:00:00 SRC=192.168.0.3 DST=192.168.0.1 LEN=60 TOS=0x10
>> > PREC=0x00 TTL=64 ID=30541
>> > DF PROTO=TCP SPT=60148 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
>> >
>> >
>> > Es posible parsear esta linea de manera que el diccionario quede por
>> ejemplo
>> >
>> > IN -> eth0
>> >
>> > MAC -> 00:00:00:00:00:00:00:00:00:00:00:00:00:00
>> >
>> >
>> > He leído algo sobre expresiones regulares pero de entrada parece
>> bastante
>> > complejo.
>> >
>>
>> Como dice el dicho:
>>
>> Some people, when confronted with a problem, think:
>> "I know, I'll use regular expressions."
>> Now they have two problems.
>>
>> :-)
>>
>>     Ezequiel
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20121114/4a1dae74/attachment.html>


More information about the pyar mailing list