Cidre2addr: Unterschied zwischen den Versionen

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: «#!/usr/bin/perl my @ret = (); <syntaxhighlight lang="perl"> my $in = <>; chomp($in); if ( $in =~ /^(\d+\.\d+\.\d+\.\d+)\/(\d+)$/ ) { my ($addr, $mask) = ($1,…»)
 
Zeile 1: Zeile 1:
 +
<syntaxhighlight lang="perl">
 +
 
#!/usr/bin/perl
 
#!/usr/bin/perl
  
  
 
my @ret = ();
 
my @ret = ();
<syntaxhighlight lang="perl">
 
 
my $in = <>;
 
my $in = <>;
 
chomp($in);
 
chomp($in);

Version vom 10. September 2015, 00:22 Uhr

#!/usr/bin/perl
 
 
my @ret = ();
my $in = <>;
chomp($in);
 
if ( $in =~ /^(\d+\.\d+\.\d+\.\d+)\/(\d+)$/ ) {
	my ($addr, $mask) = ($1, $2);
	my $iaddr = dot2int($addr);
	for (my $i = 0; $i < 2**(32-$mask); $i++) {
		print int2dot($iaddr+$i), "\n";
	}
} else {
	print "Usage: $0 n.n.n.n/m\n";
}
 
 
sub dot2int {
	my @bytes = split(/\./,shift);
 
	return undef unless @bytes == 4 && ! grep {!(/\d+$/ && $_<256)} @bytes;
 
	return unpack("N",pack("C4",@bytes));
}
 
sub int2dot {
	return join('.',unpack('C4', pack("N", $_[0])));
}