X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=clearadm%2Fdiscovery.pl;h=d7653638bae3cab3df82874f4e8ff376de9d50e3;hb=7ddf095f187ca60d9a70fb83b2bc3c2b6d91f088;hp=af0b7898bfe00fe7e30c1ce145102101760928ed;hpb=81cbd130706633b1c19ff59371c2ef61d80c562b;p=clearscm.git diff --git a/clearadm/discovery.pl b/clearadm/discovery.pl index af0b789..d765363 100755 --- a/clearadm/discovery.pl +++ b/clearadm/discovery.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl =pod @@ -41,7 +41,7 @@ $Date: 2011/01/07 20:48:22 $ -broadcastA|ddr : Broadcast IP (Default: Current subnet) -broadcastT|ime : Number of sends to wait for responses to broadcast - (Default: 30 seconds) + (Default: 10 seconds) =head1 DESCRIPTION @@ -62,6 +62,7 @@ use lib "$FindBin::Bin/lib", "$FindBin::Bin/../lib"; use Clearadm; use Display; +use OSDep; use Utils; my $VERSION = '$Revision: 1.1 $'; @@ -71,7 +72,7 @@ my $clearadm = Clearadm->new; my $broadcastTime = 10; -sub discover ($) { +sub discover($) { my ($broadcast) = @_; my $startTime = time; @@ -81,18 +82,21 @@ sub discover ($) { verbose "Performing discovery (for $broadcastTime seconds)..."; while (<$broadcast>) { - if (/from (.*):/) { - my $ip = $1; - my $hostname = gethostbyaddr (inet_aton ($ip), AF_INET); - - unless ($hosts{$ip}) { - verbose "Received response from ($ip): $hostname"; - $hosts{$ip} = $hostname; - } # unless + display "Received line: $_"; + if (/from (\S+) \((.+)\)/) { + my $hostname = $1; + my $ip = $2; + + # Remove domain + $hostname =~ s/(\w+)\..*/$1/; + + unless ($hosts{$ip}) { + verbose "Received response from ($ip): $hostname"; + $hosts{$ip} = $hostname; + } # unless } # if - last - if (time () - $startTime) > $broadcastTime; + last if (time() - $startTime) > $broadcastTime; } # while verbose "$broadcastTime seconds has elapsed - discovery complete"; @@ -101,9 +105,9 @@ sub discover ($) { } # discover # Main -my $broadcastAddress = inet_ntoa (INADDR_BROADCAST); +my $broadcastAddress = inet_ntoa(INADDR_BROADCAST); -GetOptions ( +GetOptions( usage => sub { Usage }, verbose => sub { set_verbose }, debug => sub { set_debug }, @@ -111,14 +115,21 @@ GetOptions ( 'broadcastAddr=s' => \$broadcastAddress, ) or Usage "Invalid parameter"; -Usage 'Extraneous options: ' . join ' ', @ARGV - if @ARGV; +Usage 'Extraneous options: ' . join ' ', @ARGV if @ARGV; # Announce ourselves verbose "$FindBin::Script V$VERSION"; -my $broadcastCmd = "ping -b $broadcastAddress 2>&1"; +my $broadcastCmd = 'ping '; +if ($ARCHITECTURE eq 'solaris') { + $broadcastCmd .= '-s '; +} else { + $broadcastCmd .= '-b '; +} # if + +$broadcastCmd .= "$broadcastAddress 2>&1"; + my $pid = open my $broadcast, '-|', $broadcastCmd or error "Unable to do $broadcastCmd", 1; @@ -134,17 +145,15 @@ verbose_nolf "Found $nbrHosts host"; verbose_nolf 's' if $nbrHosts != 1; verbose " on subnet $broadcastAddress"; -foreach (sort values %hosts) { - my $verbose = get_verbose () ? '-verbose' : ''; +for (sort values %hosts) { + my $verbose = get_verbose() ? '-verbose' : ''; my ($status, @output) = Execute "updatesystem.pl -host $_ $verbose"; - error "Unable to update host $_ (Status: $status)\n" - . join ("\n", @output), 1 - if $status; + error "Unable to update host $_ (Status: $status)\n" . join ("\n", @output), 1 if $status; verbose join "\n", @output; -} # foreach +} # for =pod @@ -196,4 +205,4 @@ Please report problems to Andrew DeFaria . Copyright (c) 2010, ClearSCM, Inc. All rights reserved. -=cut \ No newline at end of file +=cut