|
- #!/usr/bin/perl
- sub get_ip_array{
- $filename="$_[0]";
- 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[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 (){
- # 如果开头是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();
附件:http://down.运维网.com/data/2359394
|
|
|