# convert IP addresses to unsigned long integers my $addr="192.168.10.2"; my @addrb=split("[.]",$addr); my ( $addrval ) = unpack( "N", pack( "C4",@addrb ) ); my $mask="255.255.254.0"; my @maskb=split("[.]",$mask); my ( $maskval ) = unpack( "N", pack( "C4",@maskb ) ); # calculate network address my $netwval = ( $addrval & $maskval ); # convert network address to IP address my @netwb=unpack( "C4", pack( "N",$netwval ) ); my $netw=join(".",@netwb); # print print( $netw ); #### # calculate broadcast address my $brodval = ( $addrval & $maskval ) + ( ~ $maskval ); #### # convert IP addresses to unsigned long integers my $addr="192.168.10.2"; my @addrb=split("[.]",$addr); my ( $addrval ) = unpack( "N", pack( "C4",@addrb ) ); my $mask="255.255.254.0"; my @maskb=split("[.]",$mask); my ( $maskval ) = unpack( "N", pack( "C4",@maskb ) ); # calculate network address my $netwval = ( $addrval & $maskval ); # calculate broadcast address my $brodval = ( $addrval & $maskval ) + ( ~ $maskval ); # convert network address to IP address my @netwb=unpack( "C4", pack( "N",$netwval ) ); my $netw=join(".",@netwb); # convert broadcast address to IP address my @brodb=unpack( "C4", pack( "N",$brodval ) ); my $brod=join(".",@brodb); # print print( "Network:$netw\n" ); print( "Broadcast:$brod\n" ); #### Network:192.168.10.0 Broadcast:192.168.11.255 #### sub addrtoint { return( unpack( "N", pack( "C4", split( /[.]/,$_[0] ) ) ) ) }; sub inttoaddr { return( join( ".", unpack( "C4", pack( "N", $_[0] ) ) ) ) }; my $netwval = addrtoint( '192.168.10.2' ) & addrtoint( '255.255.254.0' ); my $brodval = $netwval | ( ~addrtoint( '255.255.254.0' ) ); print( inttoaddr( $netwval ) . "\n" ); print( inttoaddr( $brodval ) . "\n" );