[Python-es] Duda un poco básica ¿RTFM? ;-)
Amaya
amaya en debian.org
Jue Ago 22 13:57:04 CEST 2002
Hernan Martinez Foffani dijo:
> ¡que buena decision la de tu empresa! :-D
Sí, el día que además se pasen a Debian será el sitio ideal para trabajar :-)))
> ¿el tutorial no te alcanza? por la regexp que escribiste no pareces que seas
> "nuevita" en programación, no? (el tutorial puede ser algo duro para los que
> nunca programaron.)
No, el tutorial me parece excelente, pero me siento como si dieran algo por
sabido, mira el tipo de preguntas que hago :-)
Respecto a mi experiencia programando... me considero bastante mediocre :-)
Soy de letras, autodidacta, y además no tengo mucha experiencia.
> no uses "file" como nombre de variable, en la versión 2.2 es un tipo de datos
> nuevo.
Gracias, lo rectifico.
> ¿como funcionó esto? ¡¡¡te debió dar error!!!!
Cierto, copié una versión mala del script ;-)
> i en la rhs no está definida todavia.
¿Qué es rhs?
> ¿no sería mas sencillo: my_file.append(param) ?
Seguramente. A eso me refiero cuando digo que me considero bastante mediocre. A
que tiro 10 líneas para cosas que se pueden hacer en una... Pero estoy empeñada
a aprender python como sea :-)
> mmm... aquí no estás incrementando i (ni j).
Yap.
> si my_file fuera una lista de listas, sería:
> my_file[0][1]
¿Y esto está en el tutorial? Debo andar ciega total :-)
Gracias.
El script queda así:
#!/usr/bin/python
import re, string
my_file = open('amaya', 'r')
line_num = 0
#i = 0
#j = i + 1
i = j = 0
my_log = []
for line in my_file:
line_num = line_num + 1
row_elem = string.split(line)
date1 = row_elem[0] + " " + row_elem[1]
date2 = row_elem[2]
match_pat = re.compile(r'(SRC=[0-9.]+)[\t ](DST=[0-9.]+)[\t ](.*TCP|UDP)[\t ](SPT=[0-9]+)[\t ](DPT=[0-9]+)[\t ](SEQ=[0-9]+)[\t ](ACK=[0-9]+)')
pattern = match_pat.search(line)
src_addr = pattern.group(1)
dst_addr = pattern.group(2)
src_port = pattern.group(4)
dst_port = pattern.group(5)
sequence = pattern.group(6)
ack_seq = pattern.group(7)
param = [line_num, date1, date2, src_addr, dst_addr, src_port, dst_port, sequence, ack_seq]
# my_log.insert (line_num, param)
my_log.append(param)
my_file.close()
while i < line_num:
print my_log[i]
# while j < len(param):
# print my_log[i][j]
# j = j + 1
# i = i + 1
i = i + 1
Ahora me imprime esto:
[arodrigo en cuelebre iptables]$ python amaya.py
[1, 'Aug 22', '09:35:23', 'SRC=192.168.3.9', 'DST=192.168.3.11', 'SPT=37192', 'DPT=80', 'SEQ=1899023795', 'ACK=0']
[2, 'Aug 22', '09:35:23', 'SRC=192.168.3.9', 'DST=192.168.3.12', 'SPT=37193', 'DPT=80', 'SEQ=1906765896', 'ACK=0']
[3, 'Aug 22', '09:35:33', 'SRC=192.168.3.9', 'DST=192.168.3.11', 'SPT=37194', 'DPT=80', 'SEQ=1915899003', 'ACK=0']
[4, 'Aug 22', '09:35:33', 'SRC=192.168.3.9', 'DST=192.168.3.12', 'SPT=37195', 'DPT=80', 'SEQ=1911844646', 'ACK=0']
Y estoy encantada :-))
Pero si descomento y "arreglo" el último while:
while i < line_num:
while j < len(param):
print my_log[i][j]
j = j + 1
i = i + 1
Entonces se me queja:
[arodrigo en cuelebre iptables]$ python amaya.py
1
Aug 22
09:35:33
SRC=192.168.3.9
Traceback (most recent call last):
File "amaya.py", line 32, in ?
print my_log[i][j]
IndexError: list index out of range
Me imagino que i o j se están dando un viaje, pero... ¿a dónde?
Si en cambio pruebo esto (porque programo de oído ;-)))):
while i < line_num:
while j < len(param):
print my_log[i][j]
j = j + 1
i = i + 1
Me imprime esto:
[arodrigo en cuelebre iptables]$ python amaya.py
1
Aug 22
09:35:23
SRC=192.168.3.9
DST=192.168.3.11
SPT=37192
DPT=80
SEQ=1899023795
ACK=0
Pero sólo la primera línea... ¿?
Otra cosa, ¿No existe algo como i++ y j++ para incrementar un contador?
Gracias de nuevo.
--
Revolutions don't require corporate support
Más información sobre la lista de distribución Python-es