LXY3800 发表于 2019-1-17 11:26:33

网络alive主机存活捕捉 三 (完,生成smokeping配置)


[*]#!/usr/bin/perl
[*]sub get_ip_array{
[*]$filename="$_";
[*]open "file","$filename";
[*]my @nets;
[*]foreach $file_line (){
[*]    if ($file_line=~ /href=\'ip_(.*).htm/){
[*]      $file_line_net = $1;
[*]      push (@nets,$file_line_net);
[*]    }
[*]    else{
[*]      next;
[*]    }
[*]}
[*]return @nets;
[*]}
[*]
[*]# 函数,让数组 清楚一些
[*]sub let_array_clear{
[*]    my @array = @_;
[*]    my @new_array;
[*]    my @new_array_numbers;
[*]    my $ifsame = 0;
[*]    foreach $array (@array) {
[*]      #默认将 老数组中的每个值跟 新数组中的任一个值都不一样
[*]      $ifsame=0;
[*]      # 查询新数组序列中的每个值
[*]      foreach $new_array (@new_array){
[*]            #将新数组中的一个值 按照 小数点进行 分隔成4块
[*]            @new_array_numbers = split("\\.",$new_array);
[*]            #将老数组中的一个值 按照 小数点进行 分隔成4块
[*]            @array_numbers = split("\\.",$array);
[*]            #判断数组4块中的前三块儿是否相同
[*]            if ( $new_array_numbers eq $array_numbers and $new_array_numbers eq $array_numbers and $new_array_numbers eq $array_numbers){
[*]                #如果相同,那么就将是否相同 设置为1
[*]                #print "发现相同!";
[*]                $ifsame = 1;
[*]            }
[*]      }
[*]      # 比对完成后,对结果 ifsame 进行判断,如果相同,就进行下次循环,否则, 进行push操作
[*]      if ($ifsame == 1) {
[*]            next;
[*]      }
[*]
[*]      elsif ($ifsame == 0) {
[*]            $new_array = $array;
[*]            push (@new_array,$new_array);
[*]      }
[*]    }
[*]    return @new_array;
[*]}
[*]
[*]use DBI;
[*]use DBD::mysql;
[*]my $dbh = DBI -> connect("DBI:mysql:db_iplocate;host=127.0.0.1", "admin","admin",{RaiseError=>1});
[*]my $sth = $dbh->prepare( q{select city_cn,city_en from `gps`}) or die("Cannot prepare statement:", $dbh->errstr(),"\n");
[*]my $rc = $sth->execute() or die("Cannot execute statement:", $sth->errstr(), "\n");
[*]
[*]my @city_cn;
[*]my @city_en;
[*]# 将从mysql得到的city_cn和city_en放到相应的数组中
[*]while (my @row = $sth -> fetchrow_array()){
[*]    push @city_cn,$row;
[*]    push @city_en,$row;
[*]}
[*]
[*]my @isps_cn = ("移动","联通","电信");
[*]my @isps_en = ("ChinaMobile","ChinaUnicom","ChinaTelecom");
[*]foreach $i(0..(@city_cn-1)){
[*]    # 打印smokeping第一栏
[*]    print "+ $city_en[$i]\n";
[*]    print "menu = $city_en[$i]\n";
[*]    print "title = $city_en[$i]\n";
[*]    # 对运营商进行循环
[*]    foreach $j(0..2) {
[*]      # 组合出文件名称      
[*]      $file_name = "$city_en[$i]" . "_" . "$isps_en[$j]";
[*]      #print "正在处理 $file_name\n";
[*]      # 打开 snmp 扫描的结果
[*]      open "file_nmap_result","./result_nmap/$file_name";
[*]      # 初始化数组 file_nmap_result_usageips
[*]      my @file_nmap_result_usageips="";
[*]      # 处理文件的每一行,处理完成后吐出一个有效ip的数组
[*]      foreach $file_nmap_result_line (){
[*]         # 如果开头是Host,那么就是我们要找的行
[*]         if ( $file_nmap_result_line =~ m/^Host/ ){
[*]               # 将行进行 分隔 按照 空格
[*]               @file_nmap_result_line_columns = split(" ","$file_nmap_result_line");
[*]               # ip地址在 第二列,对 ip地址按照小数点进行分隔
[*]               @file_nmap_result_usageips_numbers = split("\\.",$file_nmap_result_line_columns);
[*]               # 对 ip地址的 小数点最后一个数字进行判断, 如果是0 或者255 就不再对此行进行处理
[*]               if ($file_nmap_result_usageips_numbers eq 0 || $file_nmap_result_usgaeips_number eq 255 ){
[*]                   next;
[*]               }
[*]               else{
[*]                   push(@file_nmap_result_usageips,$file_nmap_result_line_columns);
[*]               }
[*]         }
[*]         else{
[*]               next;
[*]         }
[*]      }
[*]      # 对 得到的数组进行清洗, 按照小数点分隔, 前三位相同的话,只保留一个
[*]      @file_nmap_result_usageips_clear = &let_array_clear(@file_nmap_result_usageips);
[*]      # 对得出的有效ip数组进行处理,得出sokeping可以使用的配置文件;
[*]      my $usage_ip_number = 0;
[*]      foreach $file_nmap_result_usageip (@file_nmap_result_usageips_clear){
[*]            if ($usage_ip_number eq 0){
[*]                $usage_ip_number++;
[*]                next;
[*]            }
[*]            print "++ $isps_en[$j]_$usage_ip_number\n";
[*]            print "menu = $isps_en[$j]$usage_ip_number\n";
[*]            print "title = $isps_en[$j]$usage_ip_number\n";
[*]            print "host = $file_nmap_result_usageip\n";
[*]            $usage_ip_number++;
[*]      }
[*]      close("file_nmap_result");
[*]      #print "处理$file_name......Complete!\n";
[*]    }
[*]}
[*]
[*]warn($DBI::errstr) if $DBI::err;
[*]$dbh->disconnect();
[*]$sth->finish();



附件:http://down.运维网.com/data/2359394

页: [1]
查看完整版本: 网络alive主机存活捕捉 三 (完,生成smokeping配置)