in reply to Short pinging script isn't working

The docs for Net::Ping say that it supports various different ways of checking a host is alive, and by default uses 'TCP', which attempts to connect to the TCP 'echo' port of the IP address you specify.

This is unlikely to work in a modern network environment (and is a different test to the ICMP ping your command line tool uses).

Try specifying the 'icmp' protocol and see if that helps. The docs say that this is the first arg to the ctor, so perhaps:

my $p = Net::Ping->new('icmp');
The ctor also takes other arguments (including a timeout), which may be of interest to you.

Replies are listed 'Best First'.
Re^2: Short pinging script isn't working
by grinder (Bishop) on Nov 21, 2007 at 19:07 UTC
    Try specifying the 'icmp' protocol

    Be aware that only the super-user (root) is allowed to issue ICMP packets. If you look at the ping binary on a Unix system, you will see that it is setuid root. Thus, a regular user issuing an icmp request from Perl-space is unlikely to receive a reply.

    In any event, ping should not be used to determine whether the target machine is alive and well. It doesn't do anything more than prove that the path from here to there is functional. But the thing at the other end may be well and truly wedged. Better to check whether it responds sensibly to an application transaction, like a HEAD / sent to port 80 and see what comes back.

    • another intruder with the mooring in the heart of the Perl

      Right, ICMP pings are useful mainly to determine if there is a network path available (and maybe to get a handle on your latency, do discoveries, etc. ...). If you look at how Nagios works (by default), it does application level checking normally, and then when that fails it starts running ICMP pings to try to determine if you're having a network problem or an application problem. So really, you need to use both kinds of things in tandem to get to your root cause.