- #!/usr/bin/perl
- sub get_ip_array{
- $filename="$_[0]";
- open "file","$filename";
- my @nets;
- foreach $file_line (<file>){
- 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[0] eq $array_numbers[0] and $new_array_numbers[1] eq $array_numbers[1] and $new_array_numbers[2] eq $array_numbers[2]){
- #若是相同,那麼就將是否相同 設置爲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[0];
- push @city_en,$row[1];
- }
-
- 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 (<file_nmap_result>){
- # 若是開頭是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[1]);
- # 對 ip地址的 小數點最後一個數字進行判斷, 若是是0 或者255 就再也不對此行進行處理
- if ($file_nmap_result_usageips_numbers[3] eq 0 || $file_nmap_result_usgaeips_number[3] eq 255 ){
- next;
- }
- else{
- push(@file_nmap_result_usageips,$file_nmap_result_line_columns[1]);
- }
- }
- 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();