日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Perl Nmap报告处理摸索(学习)

發布時間:2025/7/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Perl Nmap报告处理摸索(学习) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說下當時的需求,而且思路:
1.需求:需要掃描多個IP,把掃描結果保存到XML下。將XML下數據進行過濾,取出需要的數據打印出來。
2.目前難點:根據場景的不同,掃描出來的結果差異無比的大,例如每次結果都有差距。偶爾會冒出一些不懂的字段。為此很傷腦筋。
3.自己寫出來的Perl代碼:自己寫的代碼有點爛,可能學得不太好。Perl能夠讀取XML的節點,但是一旦掃多個IP,節點就會有變化。

當時使用的模塊有很多問題,對此無比的尷尬。一開始摸索的模塊是這個:XML::Simple 這是一個XML專門的處理模塊。
貼上剛開始寫的代碼:

#!/usr/bin/perluse XML::Simple;use Data::Dumper;my $simple=XML::Simple->new();my $data=$simple->XMLin('wai.xml');#print Dumper($data)."\n";print "-----------------------------------------------------\n";print "創建時間:".$data->{startstr}."\n";print "Ip地址:".$data->{host}->{address}[0]->{addr}."\n";print "mac地址:".$data->{host}->{address}[1]->{addr}."\n";print "主機名稱:null\n";print "主機狀態:".$data->{host}->{status}->{state}."\n";print "操作系統名稱:".$data->{host}->{os}->{osclass}->{osfamily}."\n";print "操作系統版本:".$data->{host}->{os}->{osclass}->{osgen}."\n";print "操作系統補丁:".$data->{host}->{os}->{osmatch}->{name}."\n";print "操作系統語言:null\n";print "表更新時間:".$data->{runstats}->{finished}->{timestr}."\n";print "服務總數量:".$data->{taskend}[3]->{extrainfo}."\n";

這就剛開始寫的代碼,比較糾結的問題來了,當掃描單個IP的時候,輸出完全正常,但是在掃描多個節點的IP的時候,
根據場景的不同,輸出結果就有很大的區別,對此甚是無奈,所以只能google搜索下解決的思路。
在后續找到一個腳本跟我的需求基本差不多,但是他使用的是sqlite3的數據庫,而我目前準備使用的是mysql的數據庫,
所以嘛,我得修改下。具體的代碼請看上一篇文章,我做了個MARK。
接著我分析了下這個腳本使用的模塊說明,無比蛋疼。。。沒辦法,英語不太好,所以我就google一個個單詞翻譯.
在此忽略了1晚上時間。。。具體說明文檔在 http://search.cpan.org/~apersaud/Nmap-Parser-1.3/Parser.pm
感興趣的童鞋可以自己移步去研究下。當然,我在這只是大概說下自己的分析思路。
接著放出最終解決問題的腳本(具體插庫的那部分我刪除了,你可以自己加),歡迎討論和學習。。:)

use Nmap::Parser;use DBI;use Config::IniFiles;main:{if ($#ARGV == -1){ usage();exit(1);}my $xmlfile=$ARGV[0];nmap_info($xmlfile);}sub usage{print "--------------------\n";print "Usage: perl nmap.xml\n";print "--------------------\n";exit;}sub nmap_info{local($file_name)=shift;my $np=new Nmap::Parser;$np->parsefile("$file_name");my $session=$np->get_session();for my $host ($np->all_hosts()){if($host->addr eq undef){$host_addr='null';}else{$host_addr=$host->addr;}if($host->status eq undef){$host_status='null';}elsif($host->status eq 'down'){$host_status=1;}elsif($host->status eq 'up'){$host_status=0;}if($host->hostname eq undef){$host_hostname='null';}else{$host_hostname=$host->hostname;}if($host->mac_addr eq undef){$host_mac_addr='null';}else{$host_mac_addr=$host->mac_addr();}if($host->tcp_port_count eq undef){$tcp_port_count='null';}else{$tcp_port_count=$host->tcp_port_count;}if($host->os_sig->osfamily eq undef){$osfamily='null';}else{$osfamily=$host->os_sig->osfamily;}if($host->os_sig->osgen eq undef){$osgen='null';}else{$osgen=$host->os_sig->osgen;}if($host->os_sig->name eq undef){$os_name='null';}else{$os_name=$host->os_sig->name;}print "IP:",$host_addr,"\n";print "狀態:",$host_status,"\n";print "主機名:",$host_hostname,"\n";print "開始時間:",$session->start_str(),"\n";print "結束時間:",$session->time_str(),"\n";print "Mac地址:",$host_mac_addr,"\n";print "服務數量:",$tcp_port_count,"\n";print "系統名稱:",$osfamily,"\n";print "系統版本:",$osgen,"\n";print "系統補丁版本:",$os_name,"\n";}}

?

轉載于:https://www.cnblogs.com/xiaoCon/archive/2013/03/17/2964409.html

總結

以上是生活随笔為你收集整理的Perl Nmap报告处理摸索(学习)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。