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