一个进行连续批量的ping操作的脚本
来源:互联网 发布:linux samba安装 编辑:程序博客网 时间:2024/04/19 23:03
#!/usr/bin/perl -w#file: mping.pluse strict;my $msg = <<USAGE;Usage:perl mping.pl 192.168.1.2perl mping.pl 192.168.1.[2,3,4-6]perl mping.pl 202.[38,40].64.(1-255)perl mping.pl 166.111.21.*USAGEdie "$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/; $strpart =~ s//[(.*)/]/$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";}