Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Find an IP within a live nework

by blue_cowdawg (Monsignor)
on Feb 27, 2013 at 19:00 UTC ( #1020948=CUFP: print w/replies, xml ) Need Help??

I whipped this up today to solve a problem that I deal with all the time. We have hundreds if not thousands of IP addresses on our network along with a very dynamic data center. What I mean by dynamic is hosts are always being added and with others being removed.

So the system guys come to me all the time and ask me for one or more IP addresses on a given network. My group manages DNS and IP addresses (as opposed to the network team for some reason) and for some reason they like to come to me in particular for those requests.

The normal process calls for combing through the DNS zone files and looking for a hole in the address range that isn't being used. Enough of that.. computers work for me not the other way around!

Here's what I came up with:

#!/usr/bin/perl -w $|=1; use strict; use Net::Ping; use Net::Netmask; use Net::DNS; use Getopt::Long; my @blocks=(); my $outfile=""; my $dns = Net::DNS::Resolver -> new; my $res = GetOptions("net=s",\@blocks, "out=s",\$outfile ); $outfile="candidates.txt" unless $outfile; @blocks=split(",",join(",",@blocks)); foreach my $i(0..$#blocks){ unless ($blocks[$i] =~ m@^\d+\.\d+\.\d+\.\d+/\d+$@){ $blocks[$i] = $blocks[$i] . "/24"; } } open FOUT,sprintf("> %s",$outfile) or die "$outfile: $!"; my $p = Net::Ping->new(); foreach my $block(@blocks){ my $net = Net::Netmask->new($block); foreach my $ip($net->enumerate()){ next if $ip =~ m@\.0$@; next if $dns->search($ip); printf "%s\r",$ip; unless ($p->ping($ip,1)){ printf FOUT "%s\n",$ip; } } }
Now there is great room for improvement in this script, but I'll leave it to the gentle reader as an intellectual excersize.

Peter L. Berghold -- Unix Professional
Peter -at- Berghold -dot- Net; AOL IM redcowdawg Yahoo IM: blue_cowdawg

Replies are listed 'Best First'.
Re: Find an IP within a live nework
by perl514 (Pilgrim) on Feb 28, 2013 at 17:54 UTC

    Hi Peter,


    Awesome script. A lot of stuff to learn from. In the hands of a right programmer, Perl is like that poem which can say so much in so few verses. Yet be vivid.

    Perlpetually Indebted To PerlMonks

    use Learning::Perl; use Beginning::Perl::Ovid; print "Awesome Books"; is a boon for Windows.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://1020948]
Approved by Old_Gray_Bear
Front-paged by Old_Gray_Bear
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (2)
As of 2018-05-26 01:22 GMT
Find Nodes?
    Voting Booth?