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

misterx
 2005-04-11 13:17
#53028 #53028
User since
2005-03-28
23 Artikel
BenutzerIn
[default_avatar]
[quote=renee,31.03.2005, 10:37]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#! /usr/bin/perl
use warnings;
use strict;
use Getopt::Long;

my ($filterPassword, $filterIp, $file, $file2);
my $help = 0;

# z.B. program.pl -p password -i 127.0.0.1 -file datei.txt
# oder: program.pl -h
GetOptions(
  "password=s"     => \$filterPassword,
  "ip=s"           => \$filterIp,
  "file=s"         => \$file,
  "file2=s"        => \$file2,
  "h"              => \$help,
);

if ($help) {
# &PrintHelp....
  exit 1;
} # if

# vielleicht hier noch ueberpruefen, ob $filterPassword und $filterIp gesetzt sind....

unless (open (LOG, "<", $file)) {
  die "Error: couldn't open '$file': $!\n";
} # unless

my %filteredLines;
while (<LOG>) {
  chomp($_);
  my (undef, $pass, $ip) = split(/ /, $_);
  if ($pass eq $filterPassword and $ip eq $filterIp) {
    push(@{$filteredLines{$ip}},$_);
  } # if
} # while
close (LOG);

{
  local $/ = "\n===";
  open(FILE2,"<$file2") or die $!;
  while(<FILE2>){
    next unless($_ =~ m/ip/s);
    my ($ip)   = $_ =~ m/ip\s*?:\s+([^\s]+)/s;
    my ($pass) = $_ =~ m/password\s*?:\s+([^\s]+)/s;
    if ($pass eq $filterPassword and $ip eq $filterIp) {
      if($filteredLines{$ip}){
        print $_,"\n" for(@{$filteredLines{$ip}});
      }
    } # if
  }
}
close FILE2;


ip1.txt:
Code: (dl )
1
2
1113193722 password1 127.0.0.1 1113193718 55555
1113193722 password2 127.0.0.2 1113193718 66666


ip2.txt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
====================================
time:  20050101101221
ip :  127.0.0.1
password:  password1

<html> hier der Text
</html>
===========================
time: 20050101101221
ip:   192.168.0.33
password: test

<body>
irgasdklgj
asvlkasjdv
slakdfj
============================
time: 2394870985235
ip: 127.0.0.1
password: test2

asvklhaskdjvhasdv
sdvasdvasdvsdv
[/quote]
wollte mich für die Unterstützung an dieser Stelle bedanken :-)
Hat mir sehr weitergeholfen.

Frage noch zum Skript: Kann man es so erweitern, dass mir die Anzahl der passwörter gezählt wird? D.h. wenn ip1.txt 4 passwörter: user3 hat, und 5 passwörter: user2, dass wenn man auf der cmd eingibt - password user3, die Anzahl der gefundenen Einträge angezeigt wird? Bisher wird es ignoriert.
Sitze noch drann.
Merci

View full thread ip mit regexp aus einer Datei filtern: wie filtert man aus einer log datei ips