Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8354[/thread]

Suchen, String vergleich (IP-Adressen)

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Franz
 2006-09-22 16:45
#70152 #70152
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe ien Liste mit IP-Adressen von Robots und möchte die mit IP-Adressen aus Logfiles abgleichen / filtern.

derzeit mache ich das so:

Ich schreibe die Ip's der Netze in ein Array
@robots =("64.68",..."64.242.88.",...);

Wie man sieht verwende ich da teilweise große IP-Bereiche.

Das Array durchlaufe ich dann mit einer Schleife....

foreach my $robot (@robots) {
if ($ip =~ /^$robot.*/) {
... tue dinge
last;
}


Gibt es da einen intelligenteren, effektiveren Ansatz?

Und btw. gibt es einen Dienst, der aktualisierte Listen von Robots veröffentlicht?
renee
 2006-09-22 16:56
#70153 #70153
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schau Dir vielleicht mal CPAN:Logfile::EPrints an.

Ansonsten wäre es praktisch, wenn Du precompiled RegExs verwendest. Damit ersparst Du der RegEx-Engine jede Menge Arbeit:

Code: (dl )
1
2
3
4
5
@robots =(qr/^64\.68/,qr/^64\.242\.88\./,...);

[...]
if ($ip =~ $robot) {
[...]



Und mit CPAN:Regexp::Assemble kannst Du einen minimalen RegEx bekommen.

Ein anderes Modul was vielleicht nicht schlecht ist, ist CPAN:Net::IP::Match::Regexp
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
murphy
 2006-09-22 20:48
#70154 #70154
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Bei IP-Adressen könnte es vielleicht auch sinnvoll sein, nicht Text sondern Binärdaten zu vergleichen. Jede IPv4 lässt sich ja in 4 Bytes repräsentieren...
When C++ is your hammer, every problem looks like your thumb.
renee
 2006-09-22 23:16
#70155 #70155
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Naja, normale Logfiles haben aber die dezimale Darstellung...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
docsnyder
 2006-09-25 17:15
#70156 #70156
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Die Darstellung, wie sie im Log steht, bekommt man wie folgt binär:

Code: (dl )
1
2
3
4
5
6
$ip  = "10.20.30.40";
@ip = ($ip =~ m(^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$));

for ( @ip ) {
$bin = $_ + 0;
}


Gruß, Doc
renee
 2006-09-25 17:25
#70157 #70157
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was willst Du damit sagen?? :rock:

Mit dem Code erfolgt keine Umwandlung in Binärzahlen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
docsnyder
 2006-09-25 17:38
#70158 #70158
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee

Na ja, murphy sagt:

Quote
Bei IP-Adressen könnte es vielleicht auch sinnvoll sein, nicht Text sondern Binärdaten zu vergleichen.


Darauf hast Du geschrieben:

Quote
Naja, normale Logfiles haben aber die dezimale Darstellung...


Das habe ich so verstanden, daß Du damit sagen willst, daß ein Binärvergleich kein Sinn mache, weil die UIP-Adressen ja nicht binär im Log-File stehen.

... und ich habe dann ein Code-Stück gepostet, wie man von der einen zur anderen Repräsentation kommt ;o)

That's it!

Gruß, Doc
renee
 2006-09-25 17:45
#70159 #70159
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
In der Regel tauchen z.B. in Apache Log-Files die IP-Adressen in der Dezimaldarstellung auf. Von daher hast Du meine Antwort schon richtig interpretiert.

Durch ein einfaches +0 kommst Du trotzdem nicht auf eine Binärdarstellung einer Dezimalzahl!

Code: (dl )
1
2
3
my $var = 10;
my $test = $var + 0;
print $test


gibt immer noch 10 aus und nicht 1010.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
docsnyder
 2006-09-25 18:15
#70160 #70160
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee

O.K., jetzt verstehe ich auch, daß Du mit meinem Posting nichts anfangen konntest ;o)

Gruß, Doc
murphy
 2006-09-25 22:49
#70161 #70161
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich dachte bei Binärrepräsentation eher an etwas, was man aus dem Text per pack('C4', split(/\./, $input, 4)) produzieren kann.
When C++ is your hammer, every problem looks like your thumb.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2006-09-22 16:45.