2012-07-23 1 views
17

Nmap::Parserを使用してnmapスキャンの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

+4

こんにちはmirod、ありがとうございました。 Perlをアップグレードすることはやりました。私はちょうどperl 5.16をインストールしました。 70MBのXMLファイルを正常に変換しました。 :-) – rhe24

+0

これを回答として提供し、それを受け入れてください。 –

答えて

3

問題は、Perlのバージョンで述べたように< 5.16で既知のバグを生じ: http://www.perlmonks.org/?node_id=955478

5.16以上にPerlをアップグレードこの問題を解決します。

+1

この質問には回答があり、回答のないリストから外れています。私はあなたがしたことをしようとしていた。やってくれてありがとう。 –

+0

私たちはとても便利な状態にしておく必要があります。 :) – askmish

関連する問題