zoukankan      html  css  js  c++  java
  • Perl Nmap报告处理+入库

    熬夜写了下。。把它完善好了。。放出来吧。。没有加注释,以后会写成模块的方式。

    #!/usr/bin/perl
    use Nmap::Parser;
    use DBI;
    use Config::IniFiles;
    
    main:
    {
        if ($#ARGV == -1){
            usage();
            exit(1);
        }elsif($ARGV[1] eq undef || $ARGV[1] == m/^\w$/){
            usage();
            exit(1);
        }
        my $xmlfile=$ARGV[0];
        my $taskid=$ARGV[1];
        nmap_info($xmlfile,$taskid);
        print "搞定!\n";
    }
    sub usage{
        print "--------------------\n";
        print "Usage: perl nmap.xml taskid\n";
        print "--------------------\n";
        exit;
    }
    sub nmap_info{
        local($file_name)=shift;
        local($taskid)=shift;
        my $cfg=new Config::IniFiles(-file=>"config.ini");
        $drive=$cfg->val('DBI','db_drive');
        $db_name=$cfg->val('DBI','db_database');
        $db_host=$cfg->val('DBI','db_host');
        $db_username=$cfg->val('DBI','db_username');
        $db_password=$cfg->val('DBI','db_password');
        my $np=new Nmap::Parser;
        $np->parsefile("$file_name");
        my $in=DBI->connect("DBI:$drive:database=$db_name:host=$db_host","$db_username","$db_password") or die "Error:$!\n";
        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;
            }
            $start_time=$session->start_str();
            $end_time=$session->time_str();
            for my $tcp ($host->tcp_ports()){
                my $service=$host->tcp_service($tcp);
                if($host->tcp_port_state($tcp) eq 'open'){
                    $tcp_port=1;
                }elsif($host->tcp_port_state($tcp) eq 'filtered'){
                    $tcp_port=2;
                }elsif($host->tcp_port_state($tcp) eq 'unfiltered'){
                    $tcp_port=3;
                }
                $service_name=$service->name();
                $service_port=$service->port();
                $service_confidence=$service->confidence();
        my $insert=$in->do("insert into services(hostid,create_at,port,proto,state,name,update_at,info)values('$taskid','$start_time','$service_port','tcp','$tcp_port','$service_name','$end_time','$service_confidence')");
            }
            for my $udp ($host->udp_ports()){
                my $service=$host->udp_service($udp);
                if($host->udp_port_state($udp) eq 'open'){
                    $udp_port=1;
                }elsif($host->udp_port_state($udp) eq 'filtered'){
                    $udp_port=2;
                }elsif($host->udp_port_state($udp) eq 'unfiltered'){
                    $udp_port=3;
                }
                $service_name=$service->name();
                $service_port=$service->port();
                $service_confidence=$service->confidence();
                my $insert=$in->do("insert into services(host_id,create_at,port,proto,state,name,update_at,info)values('$taskid','$start_time','$service_port','udp','$udp_port','$service_name','$end_time','$service_confidence')");
            }
            my $insert=$in->do("insert into hosts(taskid,create_at,address,mac,name,state,os_name,os_flavor,os_sp,os_lang,update_at,vuln_count,service_count,exploit_attemp_count)values('$taskid','$start_time','$host_addr','$host_mac_addr','$host_hostname','$host_status','$osfamily','$osgen','$os_name','null','$end_time','null','$tcp_port_count','null')");
    
        }
        $in->disconnect();
    }
  • 相关阅读:
    2019高考数学理科Ⅱ卷解析版[解答题]
    对风说爱你
    佛教人生-伴侣
    【Echarts每天一例】-1
    算法中涉及的专业英语
    python--随机函数(random,uniform,randint,randrange,shuffle,sample)
    【linux shell系列--1】crontab命令
    【Python爬虫实战--3】html写正则表达式
    mysql启动参数 skip-grant-tables
    php通过反射执行某方法
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/2965275.html
Copyright © 2011-2022 走看看