網絡alive主機存活捕捉 三 (完,生成smokeping配置)

  1. #!/usr/bin/perl 
  2. sub get_ip_array{ 
  3. $filename="$_[0]"
  4. open "file","$filename"
  5. my @nets; 
  6. foreach $file_line (<file>){ 
  7.     if ($file_line=~ /href=\'ip_(.*).htm/){ 
  8.         $file_line_net = $1; 
  9.         push (@nets,$file_line_net); 
  10.     } 
  11.     else
  12.         next
  13.     } 
  14. return @nets; 
  15.  
  16. # 函數,讓數組 清楚一些 
  17. sub let_array_clear{ 
  18.     my @array = @_; 
  19.     my @new_array; 
  20.     my @new_array_numbers; 
  21.     my $ifsame = 0; 
  22.     foreach $array (@array) { 
  23.         #默認將 老數組中的每個值跟 新數組中的任一個值都不一樣 
  24.         $ifsame=0; 
  25.         # 查詢新數組序列中的每個值 
  26.         foreach $new_array (@new_array){ 
  27.             #將新數組中的一個值 按照 小數點進行 分隔成4塊 
  28.             @new_array_numbers = split("\\.",$new_array); 
  29.             #將老數組中的一個值 按照 小數點進行 分隔成4塊 
  30.             @array_numbers = split("\\.",$array); 
  31.             #判斷數組4塊中的前三塊兒是否相同 
  32.             if ( $new_array_numbers[0] eq $array_numbers[0] and $new_array_numbers[1] eq $array_numbers[1] and $new_array_numbers[2] eq $array_numbers[2]){ 
  33.                 #如果相同,那麼就將是否相同 設置爲1 
  34.                 #print "發現相同!"
  35.                 $ifsame = 1; 
  36.             } 
  37.         } 
  38.         # 比對完成後,對結果 ifsame 進行判斷,如果相同,就進行下次循環,否則, 進行push操作 
  39.         if ($ifsame == 1) { 
  40.             next
  41.         } 
  42.  
  43.         elsif ($ifsame == 0) { 
  44.             $new_array = $array; 
  45.             push (@new_array,$new_array); 
  46.         } 
  47.     } 
  48.     return @new_array; 
  49.  
  50. use DBI; 
  51. use DBD::mysql; 
  52. my $dbh = DBI -> connect("DBI:mysql:db_iplocate;host=127.0.0.1""admin","admin",{RaiseError=>1}); 
  53. my $sth = $dbh->prepare( q{select city_cn,city_en from `gps`}) or die("Cannot prepare statement:", $dbh->errstr(),"\n"); 
  54. my $rc = $sth->execute() or die("Cannot execute statement:", $sth->errstr(), "\n"); 
  55.  
  56. my @city_cn; 
  57. my @city_en; 
  58. # 將從mysql得到的city_cn和city_en放到相應的數組中 
  59. while (my @row = $sth -> fetchrow_array()){ 
  60.     push @city_cn,$row[0]; 
  61.     push @city_en,$row[1]; 
  62.  
  63. my @isps_cn = ("移動","聯通","電信"); 
  64. my @isps_en = ("ChinaMobile","ChinaUnicom","ChinaTelecom"); 
  65. foreach $i(0..(@city_cn-1)){ 
  66.     # 打印smokeping第一欄 
  67.     print "+ $city_en[$i]\n"
  68.     print "menu = $city_en[$i]\n"
  69.     print "title = $city_en[$i]\n"
  70.     # 對運營商進行循環 
  71.     foreach $j(0..2) { 
  72.         # 組合出文件名稱        
  73.         $file_name = "$city_en[$i]" . "_" . "$isps_en[$j]"
  74.         #print "正在處理 $file_name\n"
  75.         # 打開 snmp 掃描的結果  
  76.         open "file_nmap_result","./result_nmap/$file_name"
  77.         # 初始化數組 file_nmap_result_usageips 
  78.         my @file_nmap_result_usageips=""
  79.         # 處理文件的每一行,處理完成後吐出一個有效ip的數組 
  80.         foreach $file_nmap_result_line (<file_nmap_result>){ 
  81.            # 如果開頭是Host,那麼就是我們要找的行 
  82.            if ( $file_nmap_result_line =~ m/^Host/ ){ 
  83.                # 將行進行 分隔 按照 空格 
  84.                @file_nmap_result_line_columns = split(" ","$file_nmap_result_line"); 
  85.                # ip地址在 第二列,對 ip地址按照小數點進行分隔 
  86.                @file_nmap_result_usageips_numbers = split("\\.",$file_nmap_result_line_columns[1]); 
  87.                # 對 ip地址的 小數點最後一個數字進行判斷, 如果是0 或者255 就不再對此行進行處理 
  88.                if ($file_nmap_result_usageips_numbers[3] eq 0 || $file_nmap_result_usgaeips_number[3] eq 255 ){ 
  89.                    next
  90.                } 
  91.                else
  92.                    push(@file_nmap_result_usageips,$file_nmap_result_line_columns[1]); 
  93.                } 
  94.            } 
  95.            else
  96.                next
  97.            } 
  98.         }  
  99.         # 對 得到的數組進行清洗, 按照小數點分隔, 前三位相同的話,只保留一個 
  100.         @file_nmap_result_usageips_clear = &let_array_clear(@file_nmap_result_usageips); 
  101.         # 對得出的有效ip數組進行處理,得出sokeping可以使用的配置文件; 
  102.         my $usage_ip_number = 0; 
  103.         foreach $file_nmap_result_usageip (@file_nmap_result_usageips_clear){ 
  104.             if ($usage_ip_number eq 0){ 
  105.                 $usage_ip_number++; 
  106.                 next
  107.             } 
  108.             print "++ $isps_en[$j]_$usage_ip_number\n"
  109.             print "menu = $isps_en[$j]$usage_ip_number\n"
  110.             print "title = $isps_en[$j]$usage_ip_number\n"
  111.             print "host = $file_nmap_result_usageip\n"
  112.             $usage_ip_number++; 
  113.         } 
  114.         close("file_nmap_result"); 
  115.         #print "處理$file_name......Complete!\n"
  116.     } 
  117.  
  118. warn($DBI::errstr) if $DBI::err; 
  119. $dbh->disconnect(); 
  120. $sth->finish(); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章