SCIENTIFIC-LINUX-USERS Archives

July 2015

SCIENTIFIC-LINUX-USERS@LISTSERV.FNAL.GOV

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
Matthew Harris <[log in to unmask]>
Reply To:
Matthew Harris <[log in to unmask]>
Date:
Wed, 15 Jul 2015 02:41:07 +0000
Content-Type:
text/plain
Parts/Attachments:
text/plain (1 lines)
Oh wow, yeah any time were pulling out bitwise operators I'm using a CPAN module. See http://search.cpan.org/~muir/Net-Netmask-1.9015/Netmask.pod

But congrats and keep up the learning!

Matthew Harris | Automation Engineer​ | IPsoft, Austin

Phone: 888.IPSOFT8 | Direct: 512-354-8116 | [log in to unmask]

________________________________________
From: [log in to unmask] <[log in to unmask]> on behalf of ToddAndMargo <[log in to unmask]>
Sent: Tuesday, July 14, 2015 2:31 PM
To: [log in to unmask]
Subject: Re: Just wrote my first Perl script

On 07/14/2015 09:04 AM, Matthew Harris wrote:
> Nice to see that people are still learning Perl! I'll see some code!

Hi Matthew,
Seems to me like you can do anything in Perl.  It is sweet.
Here is the code.

I use this for system administration (a lot of us here),
specifically yo set up my firewall.

You will love the equation to go from Short Mask to
Hex Mask.  A guy on the Perl group helped me with
it and I have no idea how he figured it out.

      $HexMask = ~((1 << (32 - $ShortMask)) - 1);

Wow.  Took me forever to understand what he did!

-T

GetNetwork.pl
<code>
#!/usr/bin/perl

# Given the ip and the short mask in the form of
# www.xxx.yyy.zz and xx, e.g. 192.168.244.134 26
# calculate the network

use strict;
use warnings; # You'll get little help here without these
my (  $ScriptName, $ip, $ShortMask, $HexIP, $HexMask,
      $NetworkDots, $num_args, $Network );

( $ScriptName = $0 ) =~ s{.*/}{};

# quit unless we have the correct number of command-line args
$num_args = $#ARGV + 1;
if ($num_args != 2) {
     print "You forgot something\n";
     print "Usage: $ScriptName  IP  ShortMask\n\n";
     exit 1;
}


$ip=$ARGV[0];
$ShortMask=$ARGV[1];


if ($ip =~ m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/ ) {
    # print "$1 $2 $3 $4\n";
    if ($1 > 255 || $2 > 255 || $3 > 255 || $4 > 255 ) {
       print "Invalid ip <$ip>\n";
       exit 1;
    }
    $HexIP = ($1 << 24) + ($2 << 16) + ($3 << 8) + $4;
}


$HexMask = ~((1 << (32 - $ShortMask)) - 1);
$Network = $HexIP & $HexMask;   # & is a bit wise AND

$NetworkDots= ($Network >> 24)
               . "." .
               (($Network >> 16 ) & 0xFF)
               . "." .
               (($Network >> 8 ) & 0xFF )
               . "." .
               ($Network & 0xFF );

# print "Your network for ip=$ip and Netmask=$ShortMask is $NetworkDots\n";
print "$NetworkDots\n";
</code>

ATOM RSS1 RSS2