#!/usr/bin/perl -w

if (!@ARGV || grep /-[?h]/, @ARGV) {
	print <<"_"

$0	- Berechne den Adressbereich eines IP-Netzes

USAGE:	$0 {<ip>/<netmask>}+
	$0 {<ip>/<bits>}+

_
}

sub packed2ascii {
	my @output = map join('.', unpack 'C*', $_), @_;
	if (wantarray) {@output} else {"@output"}
}

while ($_ = shift) {
	if (/^\s*([\d.]+)\/([\d.]+)\s*$/) {
		my $mask = $2;
		my @ip = split /\./, $1;
		my $ip = pack 'C'x@ip, @ip;
		if ($mask =~ y/.//) {
			my $unpacked = unpack 'B*', ($mask = pack 'C'x@ip, split /\./, $mask);
			warn "Seltsame Netzmaske: $unpacked\n" if $unpacked =~ /01/
		} else {
			$mask = pack 'B'.(@ip<<3), '1'x$mask
		}
		my $last = (my $first = $ip&$mask) | ~$mask;
		print "$_ ^=\t"                                                      .
					join(' - ', packed2ascii $first, $first eq $last ? () : $last) .
		      "\n"
	} else {
		warn "$_ ist keine gueltige IP/netmask!\n"
	}
}
