网络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]