Cidre2addr: Unterschied zwischen den Versionen
Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Sigi (Diskussion | Beiträge) |
Sigi (Diskussion | Beiträge) K |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | |||
<syntaxhighlight lang="perl"> | <syntaxhighlight lang="perl"> | ||
Aktuelle Version vom 14. Juni 2017, 11:25 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]))); }