Perl Nmap报告处理摸索(学习)
先说下当时的需求,而且思路: 当时使用的模块有很多问题,对此无比的尴尬。一开始摸索的模块是这个:XML::Simple 这是一个XML专门的处理模块。 #!/usr/bin/perl use 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 "主机名称:nulln"; 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 "操作系统语言:nulln"; print "表更新时间:".$data->{runstats}->{finished}->{timestr}."n"; print "服务总数量:".$data->{taskend}[3]->{extrainfo}."n"; 这就刚开始写的代码,比较纠结的问题来了,当扫描单个IP的时候,输出完全正常,但是在扫描多个节点的IP的时候, 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.xmln"; 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"; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |