2012-07-23 75 views
17

我想用Nmap::Parsernmap扫描的XML输出转换成CSV文件,我在开始时就遇到了问题。Nmap :: Parser,大文件上的分段错误

解析小型TCP/UDP扫描可以正常工作,但是当我尝试转换大型文件(例如20 MB)时,尤其是打开所有65535 UDP端口的文件时,出现分段错误。

这个问题似乎是“parsefile”的方法。

我试图在Linux和Mac OS X版本不同的Perl 5.10/5.14的相同的结果。请参阅下面的代码片段。

#!/usr/bin/env perl 
use strict; use warnings; 
use Nmap::Parser; 

my $np1 = new Nmap::Parser; 
my $xmlin = $ARGV[0]; 

sub read_file { 
    $np1->parsefile($xmlin); 
    for my $host ($np1->all_hosts()) { 
     for my $port ($host->udp_ports()) { 
      print $host->ipv4_addr()." ".$port."\n"; 

     } 
    } 
} 

&read_file; 
+13

可以尝试用Perl 5.16?它看起来像Perl中的一个错误,在这里描述:http://www.perlmonks.org/?node_id=955478 – mirod 2012-07-23 09:37:57

+4

嗨mirod,非常感谢你的帮助。升级Perl取得了诀窍。我刚刚安装了perl 5.16,现在一切正常。成功转换70MB XML文件。 :-) – rhe24 2012-07-23 11:47:11

+0

请提供这作为一个答案,并接受它。 – 2012-10-15 20:37:41

回答

3

问题的出现是由于在Perl版本< 5.16一个已知的错误如在提及: http://www.perlmonks.org/?node_id=955478

升级Perl来5.16或更高会解决这个问题。

+1

这个问题有答案,且朝悬而未决名单。我正要做你做的事情。谢谢你这样做。 – 2012-10-18 16:11:43

+0

我们得保持非常有用。 :) – askmish 2012-10-18 17:02:14