[原]ping一段网络的perl脚本

ping是一个很常用的网络检测脚本,比较唯一不足的是一次只能检测一个IP地址。我用perl包装了一下,使得它可以ping一段网络地址:

#! /usr/bin/perl -w
use strict;

die print "usage : range_ping.pl 192.168.1.1 192.168.1.100 \n"
."Powered By killkill \n\n"
    if scalar @ARGV != 2 ;

my ( $start_ip , $end_ip ) = @ARGV;
my $start = &ip2int($start_ip);
my $end   = &ip2int($end_ip  );

my $i = $start;
for ( $start .. $end )
{
    my $ip = &int2ip($_);
    my @val = `ping -c1 -W1 $ip;echo \$?`;
    if ($val[$#val] == 0 )
    {
        print " + $ip \n";
    }
    else
    {
        print " | $ip \n";
    }
}

sub ip2int
{
  $_[0] =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
  return (16777216*$1)+(65536*$2)+(256*$3)+$4;
}
sub int2ip
{
  return ($_[0]/16777216)%256 . '.' .
         ($_[0]/65536)%256    . '.' .
         ($_[0]/256)%256      . '.' .
          $_[0]%256;
}

功能很简单,但是很有用。