Schrift
[thread]6458[/thread]

hostname checking

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
esskar
 2004-08-04 02:30
#85352 #85352
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hi.

kennt ihr ein modul, welches die syntax eines hostnamen + ipaddresse checkt; ich will nur die syntax prüfen; nicht prüfen, ob der name auch existiert... und CGI::Untaint::hostname will ich nicht!
renee
 2004-08-04 09:33
#85353 #85353
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Check für IP-Adresse: http://search.cpan.org/~abigai....m
Das könnte auch ganz interessant sein: http://search.cpan.org/~crein....m
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/
esskar
 2004-08-06 01:29
#85354 #85354
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hab es jetzt mal so gelöst:

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
use constant REGEXP_HOSTNAME      => qr/^([\w\-.]+)$/;
use constant REGEXP_IPADDR        => qr/^((?:(?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})))$/;

sub valid_hostname
{
  my $value = shift;

  return 0 unless $value =~ REGEXP_HOSTNAME;
return 0 unless index($value, ".") > 0;

  my @parts = split/\./, $value;
  my $valid = @parts;

  foreach my $label (@parts)
  {
     $valid = 0 if (length $label > 63) or ($label =~ m!^\-!) or ($label =~ m!\-$!);
     last unless $valid;
  }

  $valid = 0 if $parts[-1] =~ m!^\d.*!;

  return $valid;
}

sub valid_ipaddr
{
  my $value = shift;
  return $value =~ REGEXP_IPADDR;
}

sub valid_host
{
  my $value = shift;
  return valid_hostname($value) || valid_ipaddr($value);
}


meinungen erwünscht!\n\n

<!--EDIT|esskar|1091741673-->
esskar
 2004-08-11 05:04
#85355 #85355
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
habe das ganze jetzt wohl vollendet:

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
use Net::IDN::Encode;

use constant REGEXP_HOSTNAME => qr!^[\w\-.]+$!;
use constant REGEXP_IPADDR   => qr!^((?:(?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})))$!;

sub host_toidn
{
  return domain_to_ascii(shift);
}

sub host_fromidn
{
  return domain_to_unicode(shift);
}

sub valid_hostname
{
  my $value = host_toidn(shift);

  return 0 unless $value =~ REGEXP_HOSTNAME;
  return 0 unless index($value, ".") > 0;

  my @parts = split /\./, $value;
  my $valid = scalar @parts;

  foreach my $label (@parts)
  {
     $valid = 0 if (length $label > 63) or ($label =~ qr!^\-!) or ($label =~ qr!\-$!);
     last unless $valid;
  }

  $valid = 0 if $parts[-1] =~ qr!^\d.*!;

  return $valid;
}

sub valid_ipaddr
{
  my $value = shift;
  return $value =~ REGEXP_IPADDR;
}

sub valid_host
{
  my $value = shift;
  return valid_hostname($value) || valid_ipaddr($value);
}


Spaß!\n\n

<!--EDIT|esskar|1092205010-->
esskar
 2004-08-11 10:38
#85356 #85356
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hab es mal noch ins wiki gestellt

Wiki:String auf Hostnamen und Ip-Adresse prüfen
ronald
 2004-08-11 11:52
#85357 #85357
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,11.08.2004, 03:04]
Code: (dl )
1
2
3
4
5
6
use constant REGEXP_IPADDR   => qr!^((?:(?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})[.](?:25[0-5]|2[0-4]\d|[0-1]??\d{1,2})))$!;
sub valid_ipaddr
{
my $value = shift;
return $value =~ REGEXP_IPADDR;
}


Spaß![/quote]

ohne beurteilen zu können/wollen ob deine RegEx richtig oder vollständig ist oder noch irgendwelche Sonderfälle berücksichtigt würde ich das so machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub valid_ipaddr
{
my $value = shift;
my @teile = split /\./, $value;
# zuerst mal prüfen, ob es sich um eine korrekte Adresse handelt
return(0) if @teile != 4; # es müssen 4 Teile sein
foreach (@teile) { # in jedem Teil
return if /\D/; # dürfen nur Ziffern vorkommen
return if $_ > 255 or $_ < 0; # zwischen 0 und 255
}
# hier können evtl. noch weitere Prüfungen folgen (127.0.0.1)
return(1); # o.k.
}
# untested

Falls du dann noch irgendwelche Sonderaktionen brauchst (z.B. 127.0.0.1 oder so), kannst du das hier einfacher einbauen als bei deiner RegEx.
esskar
 2004-08-11 12:40
#85358 #85358
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
danke...
das hatte ich zuerst auch überlegt...
Dubu
 2004-08-11 15:53
#85359 #85359
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ihr wisst schon, dass auch 127.1 eine gueltige IPv4-Adresse ist, oder? ;)

Allerdings gibt es durchaus einige Programme, die damit auch nicht klar kommen. Und sehr gebraeuchlich sind solche Abkuerzungen auch nicht.

Allerdings wuerde ich heutzutage schon mal darueber nachdenken, auch IPv6-Adressen pruefen zu koennen.
betterworld
 2004-08-15 16:21
#85360 #85360
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=esskar,11.08.2004, 03:04]
Code: (dl )
$valid = 0 if $parts[-1] =~ qr!^\d.*!;
[/quote]
Ich las soeben http://cr.yp.to/djbdns/dot-local.html und mir fiel auf, dass Deine Bedingung fuer Hostnamen nicht mehr erfuellt ist, wenn man den Vorschlaegen in diesem Dokument folgt.
Relais
 2004-08-15 17:50
#85361 #85361
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum ignoriert ihr CPAN:Regexp::Common::net ?
@renee hatte es doch gleich zu Anfang vorgeschlagen.
Warum so viel Eifer dieses Rad auch noch nachzubauen?
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2004-08-04 02:30.