Net::Ping help

Steve Smythe ssmythe at docent.com
Thu Nov 21 15:46:56 CST 2002


Yeah.  It turns out I need to use the ICMP protocol instead of UDP.

You can use Net::Ping with

    $p = Net::Ping->new('icmp');
    if ($p->ping($host, 10)) {
       # alive
    }

...or use Net::Ping::External (which uses ICMP) with

    $alive = ping(host => "hostname");

Thanks everyone for the great feedback!

Steve

-----Original Message-----
From: Ed L. [mailto:pppm at bluepolka.net]
Sent: Thursday, November 21, 2002 11:08 AM
To: Steve Smythe; Pikes Peak Perl Mongers (E-mail)
Subject: Re: Net::Ping help


Same problem exists on my linux.  But Net::Ping::External seems to 
work.

Regards,
Ed Loehr

On Thursday 21 November 2002 10:46 am, Steve Smythe wrote:
> Hiya Gang!
>
> It's been a year since I moved to CA and I've really missed you
> folks. I wish I could have lunches with you guys.  :-)
>
> I'm having an interesting problem with a hosts monitoring script. 
> I'm just now putting it together, and I'm coming up with some
> strange results.
>
> I'm using the Net::Ping module on win32, and I don't get pings back
> from the same machine when I use the windows ping command
> that says the host is up.  Here's the script...
>
> ---------------------------
> #!c:/perl/bin/perl -w
> ###################################################################
>######### ##
> # monitor - Monitor host ping status and email failures
> #
> #  author: Steve Smythe
> #   email:  <mailto:ssmythe at docent.com> ssmythe at docent.com
> # version: 1.0
> #    date: 2002.11.21
> ###################################################################
>######### ##
>
> use Net::SMTP;
> use Net::Ping;
>
>
> ###################################################################
>######### ##
> # Init
> ###################################################################
>######### ##
> sub Init {
>  # mail globals
>  our $mailHost="mail.docent.com";
>  our $mailFrom="ssmythe\@docent.com";
>
>  # host globals
>  our $hostList="monitor_hosts.txt";
>  our %hosts=();
>
>  # message globals
>  our $msg="Ping Results:\n\n";
> }
>
>
> ###################################################################
>######### ##
> # GetHostList
> ###################################################################
>######### ##
> sub GetHostList {
>  my $file="";
>
>  $file="$hostList";
>  open(FILE, "$file") || die "cannot open file \"$file\" for input:
> $!"; while(<FILE>) {
>   chomp;
>   s/\#.*$//g;  # strip comments at end of line
>   s/^[\s]+//g; # strip leading whitespace
>   s/[\s]+$//g; # strip trailing whitespace
>   if (/^\#/ || /^[\s]*$/) { next; } # skip comments and blank lines
>   $hosts{$_}='';
>  }
>  close(FILE) || die "cannot close file \"$file\" for input: $!";
> }
>
>
> ###################################################################
>######### ##
> # DumpHostList
> ###################################################################
>######### ##
> sub DumpHostList {
>  my $host="";
>
>  foreach $host (sort keys %hosts) {
>   print "[$host]\n";
>  }
> }
>
>
> ###################################################################
>######### ##
> # PingHost
> ###################################################################
>######### ##
> sub PingHost {
>  my ($host)=@_;
>  my $rc=0;
>
>  my $p="";
>
>  $p = Net::Ping->new();
>  if ($p->ping($host, 10)) {
>   $rc=1;
>  }
>  $p->close();
>
>  printf ("%-3d ", $rc);
>
>  return($rc);
> }
>
>
> ###################################################################
>######### ##
> # PingHosts
> ###################################################################
>######### ##
> sub PingHosts {
>  my $host="";
>
>  foreach $host (sort keys %hosts) {
>   printf("%-20s", $host);
>   $msg.=sprintf("%-20s", $host);
>   if (PingHost($host) == 1) {
>    print "ok\n";
>    $msg.="ok\n";
>   } else {
>    print "failed\n";
>    $msg.="failed\n";
>   }
>  }
> }
>
>
> ###################################################################
>######### ##
> # Email
> ###################################################################
>######### ##
> sub Email {
>  my ($mailTo, $subject, $msg)=@_;
>
>  my $smtp="";
>
>  $smtp = Net::SMTP->new($mailHost) || die "can't open mailhost:
> $mailHost"; $smtp->mail($mailFrom)    || die "can't set mail from:
> $mailFrom"; $smtp->to($mailTo)     || die "can't set mail to  :
> $mailTo"; $smtp->data("From: $mailFrom\nTo: $mailTo\nSubject:
> $subject\n\n$msg"); $smtp->quit;
> }
>
>
> ###################################################################
>######### ##
> # Process
> ###################################################################
>######### ##
> sub Process {
>  GetHostList();
>  # DumpHostList();
>  PingHosts();
>  # Email("$mailFrom", "Ping Stats", "$msg");
> }
>
>
> ###################################################################
>######### ##
> # MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN
> MAIN MAIN #
> ###################################################################
>######### ##
> Init();
> Process();
> ---------------------------
>
> Here's the example data file:
>
> ---------------------------
> # monitor_hosts.txt - host list to monitor
>
> slv-eng-p4  # Perforce Server
> slv-eng-stor2  # CD-ROM, build image server
> hydra   # Solaris 5.x, 6.x build server
> sol   # Solaris 4.x build server
> cmbuild   # Win32 5.x build server
> qabuild   # Win32 4.x build server
> gbuild   # Win32 Exchange 6.x build server
>
> ---------------------------
>
> Here's the script output:
>
> D:\dev_perforce\cmtools\monitor>monitor.pl
> cmbuild             1   ok
> gbuild              0   failed
> hydra               1   ok
> qabuild             0   failed
> slv-eng-p4          0   failed
> slv-eng-stor2       1   ok
> sol                 1   ok
>
> Here's when I manually ping each box...
>
> D:\dev_perforce\cmtools\monitor>ping cmbuild
>
> Pinging cmbuild.docent.com [172.25.2.227] with 32 bytes of data:
>
> Reply from 172.25.2.227: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.227: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.227: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.227: bytes=32 time<10ms TTL=128
>
> Ping statistics for 172.25.2.227:
>     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
> Approximate round trip times in milli-seconds:
>     Minimum = 0ms, Maximum =  0ms, Average =  0ms
>
> D:\dev_perforce\cmtools\monitor>ping gbuild
>
> Pinging gbuild.docent.com [172.25.2.229] with 32 bytes of data:
>
> Reply from 172.25.2.229: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.229: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.229: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.229: bytes=32 time<10ms TTL=128
>
> Ping statistics for 172.25.2.229:
>     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
> Approximate round trip times in milli-seconds:
>     Minimum = 0ms, Maximum =  0ms, Average =  0ms
>
> D:\dev_perforce\cmtools\monitor>ping hydra
>
> Pinging hydra.docent.com [172.25.2.82] with 32 bytes of data:
>
> Reply from 172.25.2.82: bytes=32 time<10ms TTL=255
> Reply from 172.25.2.82: bytes=32 time<10ms TTL=255
> Reply from 172.25.2.82: bytes=32 time<10ms TTL=255
> Reply from 172.25.2.82: bytes=32 time<10ms TTL=255
>
> Ping statistics for 172.25.2.82:
>     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
> Approximate round trip times in milli-seconds:
>     Minimum = 0ms, Maximum =  0ms, Average =  0ms
>
> D:\dev_perforce\cmtools\monitor>ping qabuild
>
> Pinging qabuild.docent.com [172.25.2.163] with 32 bytes of data:
>
> Reply from 172.25.2.163: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.163: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.163: bytes=32 time<10ms TTL=128
> Reply from 172.25.2.163: bytes=32 time<10ms TTL=128
>
> Ping statistics for 172.25.2.163:
>     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
> Approximate round trip times in milli-seconds:
>     Minimum = 0ms, Maximum =  0ms, Average =  0ms
>
> ...and so on...
>
> So does the windows ping command have a more relaxed
> standard for failed packets?  I don't get it.  Anyone have an
> idea on this?
>
> Steve
>
>
>
> Steve Smythe
> Sr. CM Engineer
> ssmythe at docent.com <mailto:ssmythe at docent.com>
> W:650-934-9546
> C:925-699-6822
> Docent, Inc.
> 2444 Charleston Road
> Mountain View, CA 94043-1622
> http://www.docent.com <http://www.docent.com/>

----------------------------------------
Content-Type: text/html; charset="iso-8859-1"; name="Attachment: 1"
Content-Transfer-Encoding: 7bit
Content-Description: 
----------------------------------------



More information about the Pikes-peak-pm mailing list