#! / usr / bin / perl -w
#file: MPINPL
Use strict;
MY $ msg = << usage;
USAGE:
Perl MPING.PL 192.168.1.2
Perl MPINPING.PL 192.168.1. [2, 3, 4-6]
Perl MPING.PL 202. [38, 40] .64. (1-255)
Perl MPING.PL 166.111.21. *
USAGE
DIE "$ msg / n" if scalar (@argv) <1;
my @parts = split //./,$ARGV[0];
DIE "$ msg / n" if scalar (@parts)! = 4;
my (@IPSTR);
& iter_ping;
SUB ITER_PING
{
MY $ IDX = scalar (@Ipstr);
IF ($ IDX == 4)
{
& ping_host;
Return;
}
MY $ StrPart = Parts [$ IDX];
$ strpart = ~ s //(( ((((()/)/$ 1/1;
$ strpart = ~ s //[ (.* )/]/ $ 1/1/1;
$ StrPart = ~ s /-/../g;
$ strpart = '0..255' if $ strpart EQ '*';
My @nums;
Eval '@nums = ('. $ strpart. ')';
Foreach my $ Num (@nums)
{
Push @ Ipstr, $ Num;
& iter_ping;
POP @IPSTR;
}
}
Sub ping_host
{
MY $ host = JOIN ".", @ ipstr;
MY $ pingstr = "pinging $ host ...";
Print $ pingstr;
My @ret = `ping -n 1 $ host`;
MY $ RETSTR = JOIN ', @ Ret;
IF ($ RETSTR = ~ / 100% / mi)
{
Print "/ b" x length ($ pingstr);
Return;
}
Print "[OK]";
@ret = `ping -a -n 1 $ host`;
$ RETSTR = JOIN '', @ Ret;
IF ($ RETSTR = ~ / pinging / s (/ s ) / s / mi)
{
Print "Name: $ 1";
}
Print "/ n";
}