#!/usr/bin/perl
use strict;
use Term::ANSIColor

#by TR
#color added by John

#my $ip = "10.0.3.110";
#my $netmask = "255.0.0.0";
system(clear);
print color("magenta"),"#########################################",color("reset"),"\n";
print color("green"),  "Enter your ipaddress:\t",color("red");
chomp (my $ip=<STDIN>); print color("reset");

print color("green"),  "Enter your Subnetmask:\t",color("red");
chomp (my $netmask=<STDIN>); print color("reset");
print color("magenta"),"#########################################",color("reset"),"\n";
 
#--------------------

print "       IP:   $ip\n";

print "  netmask:   $netmask\n";

print "  network:   ", network($ip, $netmask), "\n";

print "broadcast:   ", broadcast($ip, $netmask), "\n";

#-------------------------------

sub network
{
    my $ip_str = shift;			 			#  assign the ip to $ip_str
    my $netmask_str = shift;					#  assign netmask to netmask_str

    my $ip = pack('CCCC', split(/\./, $ip_str));		# split the ip into a list, on dots, and convert numbers to bytes
    print "This is IP after pack:\t $ip\n\n";
    print "This is ip_str\t$ip_str\n";
 
    my $netmask = pack('CCCC', split(/\./, $netmask_str));

    my $network = $ip & $netmask;

    my $network_str = join('.', unpack('CCCC', $network));

    return $network_str;
}

sub broadcast
{
    my $ip_str = shift;
    my $netmask_str = shift;
    my $network_str = network($ip_str, $netmask_str);

    my $network = pack ('CCCC', split(/\./, $network_str));
    my $netmask = pack ('CCCC', split(/\./, $netmask_str));

    my $broadcast = $network | ~ $netmask;

    my $broadcast_str = join('.', unpack('CCCC', $broadcast));

    return $broadcast_str;
}
