linux-l: nochmal kleines perl-problem...

Jens Dreger jens.dreger at physik.fu-berlin.de
Do Mär 29 18:19:28 CEST 2001


On Thu, Mar 29, 2001 at 03:30:29PM +0200, Manuel Tennert wrote:
> > Hallo,
> >
> > Ich möchte, daß mein Script auf verschiedene Befehle von autorisierten
> > Usern reagiert. Diese sollen anhand ihrer mask identifiziert werden.
> > Days ganze funktioniert schon, bei festen masks.
> > Problem ist jetzt, daß das ganze bei dynamischen IP adressen Variable
> > ist, also z.B.:
> > ident at p3E9BEB0D.dip.t-dialin.net
> >
> 
> Hey an diesem Problem brüte ich jetzt auch schon eine ganze Woche und hab auch
> noch keine Lösung....
> wäre wirklich gut wenn jemand einen Vorschlag parat hätte...

----------8<-----------------------------
#!/usr/local/bin/perl -w
#
# mask.pl
# 
my @mask_patterns = ( 
		     "blah\@blub.de", 
		     "ident\@p3E9BEB0D.dip.t-dialin.net", 
		     "ident\@p[0-9A-F]{8}.dip.t-dialin.net"
);

foreach $mask (@ARGV) {
  print "$mask:\t", &check_mask($mask) ? "ok" : "no way", "\n";
}

sub check_mask {
  my $mask = shift @_;
  my $ok = 0;

  foreach $pattern (@mask_patterns) { if($mask =~ /$pattern/) { $ok++; } }

  return $ok;
}
--------------------8<--------------------------

Test:

dreger at smart:..belug/masks> ./mask.pl blah at blub.de \
			    ident at p3E9BEB0D.dip.t-dialin.net \
			    ident at p3E9BEB0F.dip.t-dialin.net \
			    ident at whatever.dip.t-dialin.net
blah at blub.de:   ok
ident at p3E9BEB0D.dip.t-dialin.net:       ok
ident at p3E9BEB0F.dip.t-dialin.net:       ok
ident at whatever.dip.t-dialin.net:        no way

Beliebig ausbaubar. Man verwende _nicht_ den zu testenden String als
Pattern, sondern gebe Pattern an, die auf den zu testenden String
angewendet werden.

Der Pattern "ident\@p[0-9A-F]{8}.dip.t-dialin.net" erschlaegt alle
Adressen, die mit ident at p anfangen, dann 8 beliebige HEX-Zeichen
enthalten und mit .dip.t-dialin.net aufhoeren.

Gruss,

Jens.




Mehr Informationen über die Mailingliste linux-l