Thread ip mit regexp aus einer Datei filtern: wie filtert man aus einer log datei ips
(33 answers)
Opened by misterx at 2005-03-28 16:35
so, hier ist mein Quellcode - die anzahl der ips in ip2.txt wird aber nicht gezählt, weiss leider nicht; wieso.
Hier mein Quellcode: Code: (dl
)
1 #! /usr/bin/perl hier die ip1.txt: Code: (dl
)
1 1113193722 password1 127.0.0.1 1113193718 55555 und die ip2.txt Code: (dl
)
1 ==================================== wenn ich nun eingebe: perl skript.pl -ip 127.0.0.1 -file ip1.txt -file2 ip2.txt; dann werden die ips (in diesem Fall die 127.0.0.1) aus ip2.txt nicht gezählt. Wieso? Danke für die Hinweise! Eine andere Frage: in ip1.txt steht immer in der vierten Spalte der unixtimestamp (bsp: Code: (dl
)
1113193718 in ip2.txt steht in jedem Datensatz, welcher durch === getrennt ist, auch die zeit, aber im human-format: beispiel: ip1.txt: 1112263698 == ip2.txt "Mo Apr 20 12:50:33 2005". Wie kann ich es überprüfen, ob die Zeit aus ip1.txt gleich der aus ip2.txt ist? ich weiss, es gibt in CPAN die ParseDate funktion; aber die Daten liegen ja in dem oben genannten Format, deswegen brauche ich eine eigene. Wieso ich es brauche? Eine IP kann ja mit gleichem password mehrere logeinträge gemacht haben, und die kann ich nur auseinanderhalten an dem Zeitstempel. Wenn ich also eingebe: perl skript.pl -ip 127.0.0.1 -file ip1.txt -file2 ip2.txt, dann soll gefiltert werden nach der ip in beiden Dateien, die Anzahl der gefundenen Einträge in beiden .txt ausgegeben werden, und wenn man z.B. noch die option -time einbaut, dann ist es eindeutig; also sowas: perl skript.pl -ip 127.0.0.1 -time 1112263698 -file ip1.txt -file2 ip2.txt, d.h. es wird die ip 127.0.0.1 aus ip1.txt genommen mit dem genannten Zeitstempel und wird vergliechen mit der 127.0.0.1 aus ip2.txt; aber vor allem anhand des stempels (der ja z.b. Mo Apr 20 12:50:33 2005 ist) - dann wird ausgegeben: z.b. bei mehreren gleichen ips, aber unterschiedlichen zeitstempel: in ip1.txt found insg. 4 ips, in ip2.txt found insg. 4 ips, but with same timestampe: found 1 in ip1.txt, 1 ip in ip2.txt. Danke für die Hinweise! Sitze schon seit fast einer Woche drann, und habe immer nur Teillösungen, die teilweise funktionieren. Grüsse ---- PS: Edit: da ich weiss, dass die .txt immer die gleichen ips und passwörter enthalten, möchte ich es optional machen, d.h. dass man nur perl skript.pl -time 1112263698 -file ip1.txt -file2 ip2.txt, eingibt, und trotzdem die Ausgabe erscheint. Und OPTIONAL soll es mit -ip und - password ebenso funktionieren (tut es ja jetzt auch), wenn sich doch die ip vom ISP ändert. DANKE! EDIT: Eine Frage noch: was macht im quellcode: Code: (dl
)
my ($pass) = $_ =~ m/password\s*?:\s+([^\s]+)/s; filtert es den zugehörigen password? Also match password? Das Passwort ist ja aber verschieden, in ip1.txt steht es immer in der 2ten Spalte; es kann also heissen perluser oder 2bon2b; oder etwas anderes. Es ist halt immer die zweite Spalte, wo das Passwort steht; in der dritten steht immer die IP. Danke für Hinweise! Ich dachte halt, dass die ganze Datei ip1.txt in array eingelesen wird -Zeilenweise, also: 1113193722 user 127.0.0.1 1113193718 55555 1113193722 keins 127.0.0.2 1113193718 66666 usw.... und in array[1] steht immer das password; in dem Fall user und keins und noch weitere, falls die Datei länger wird, in array[2] steht immer die IP, und in array[3] immer der Zeitstempel, in array[4] die zugehörige porcessid. Und dann halt vergliechen wird anhand des arrays.\n\n <!--EDIT|misterx|1113140163--> |