網絡alive主機存活捕捉 二 (掃描)

 

  
  
  
  
  1. #!/usr/bin/perl -w 
  2. ##################################### 函數 get_ip_array ########################################## 
  3. ################## 輸入從www.5maila.com 上面搜索並下載的 文件名字  
  4. #################  輸出 從裏面找到的 ip地址段 
  5. sub get_ip_array{ 
  6. $filename="$_[0]"
  7. open "file","$filename"
  8. my @nets; 
  9. foreach $file_line (<file>){ 
  10.     if ($file_line=~ /href=\'ip_(.*).htm/){ 
  11.         $file_line_net = $1; 
  12.         push (@nets,$file_line_net); 
  13.     } 
  14.     else
  15.         next
  16.     } 
  17. return @nets; 
  18.  
  19. ##################################函數 let_array_clear########################################### 
  20. #################### 輸入一個含有若干ip地址的 數組 
  21. #################### 輸出  同一個/24網絡裏面 只有 一個 ip地址 存在 
  22. # 函數,讓數組 清楚一些 
  23. sub let_array_clear{ 
  24.     my @array = @_; 
  25.     my @new_array; 
  26.     my $ifsame = 0; 
  27.     foreach $array (@array) { 
  28.         #默認將 老數組中的每一個值跟 新數組中的任一個值都不同 
  29.         $ifsame=0; 
  30.         # 查詢新數組序列中的每一個值 
  31.         foreach $new_array (@new_array){ 
  32.             #將新數組中的一個值 按照 小數點進行 分隔成4塊 
  33.             @new_array_numbers = split("\\.",$new_array); 
  34.             #將老數組中的一個值 按照 小數點進行 分隔成4塊 
  35.             @array_numbers = split("\\.",$array); 
  36.             #判斷數組4塊中的前三塊兒是否相同 
  37.             if ( $new_array_numbers[0] == $array_numbers[0] and $new_array_numbers[1] == $array_numbers[1] and $new_array_numbers[2] == $array_numbers[2] ){ 
  38.                 #若是相同,那麼就將是否相同 設置爲1 
  39.                 $ifsame = 1; 
  40.             } 
  41.         } 
  42.         # 比對完成後,對結果 ifsame 進行判斷,若是相同,就進行下次循環,不然, 進行push操做 
  43.         if ($ifsame == 1) { 
  44.             next
  45.         } 
  46.  
  47.         elsif ($ifsame == 0) { 
  48.             $new_array = $array; 
  49.             push (@new_array,$new_array); 
  50.         } 
  51.     } 
  52.     return @new_array; 
  53.  
  54. ######################################## 鏈接數據庫 #################################################### 
  55. use DBI; 
  56. use DBD::mysql; 
  57. my $dbh = DBI -> connect("DBI:mysql:db_iplocate;host=127.0.0.1""admin","admin",{RaiseError=>1}); 
  58. my $sth = $dbh->prepare( q{select city_cn,city_en from `gps`}) or die("Cannot prepare statement:", $dbh->errstr(),"\n"); 
  59. my $rc = $sth->execute() or die("Cannot execute statement:", $sth->errstr(), "\n"); 
  60. # 初始化兩個數組 , 用來存放 從 數據庫中得出的 城市 中文名字 和 英文名字 
  61. my @city_cn; 
  62. my @city_en; 
  63. # 將從mysql獲得的city_cn和city_en放到相應的數組中 
  64. while (my @row = $sth -> fetchrow_array()){ 
  65.     push @city_cn,$row[0]; 
  66.     push @city_en,$row[1]; 
  67. # 初始化兩個數組,用來存放 三個運營商的 中文名字 和 英文名字  
  68. my @isps_cn = ("移動","聯通","電信"); 
  69. my @isps_en = ("ChinaMobile","ChinaUnicom","ChinaTelecom"); 
  70. # 對城市列表數組 進行 循環 
  71. foreach $i(0..(@city_cn-1)){ 
  72.     # 對 運營商數組 進行循環 
  73.     foreach $j(0..@isps_cn-1) { 
  74.         # 組合出英文文件名稱        
  75.         $file_name = "$city_en[$i]" . "_" . "$isps_en[$j]"
  76.         # 開始處理 
  77.         print "開始處理$file_name......Ready!" 
  78.         # 1. 使用get_ip_array 的到 可能的ip地址段  
  79.         # 2. 使用let_array_clear 將獲得的 ip地址段 數組 清洗, 確保不重複 
  80.         my @result = &let_array_clear(&get_ip_array("$file_name")); 
  81.         # 初始化 $nmap_target  
  82.         $nmap_target = ""
  83.         # 循環讀出 result數組中存在的目標網段, 並在結尾加上 /24並 合併 
  84.         foreach $result (@result){ 
  85.             $nmap_target .= $result . "/24 "
  86.         } 
  87.         print `nmap -n -sP $nmap_target -oN result_nmap/$file_name`; 
  88.         print "處理$file_name......Complete!\n"
  89.     } 
  90.  
  91. warn($DBI::errstr) if $DBI::err; 
  92. $dbh->disconnect(); 
  93. $sth->finish(); 
相關文章
相關標籤/搜索