1 pièce(s) jointe(s)
Script perl fonctionne en .pl mais pas en .exe
Bonjour à tous !
Alors voilà, j'ai un script Perl qui à pour but de convertir des fichiers XML en map Freemind (.mm).
Quand je lance ce script perl en ligne de commande tout fonctionne à merveille, cependant, j'ai besoin d'utiliser ce script sur une machine qui n'a pas perl. Je l'ai donc converti en fichier exécutable avec le module pp de PAR:: Packer. Mais quand je lance l'exécutable j'ai une erreur et le script ne marche plus.
Pour information, il n'y a besoin d'aucun paramètre pour lancer le script.
Voici mon erreur :
Pièce jointe 243965
Si je comprend bien l'erreur il ne trouve pas le fichier, pourtant il existe bel et bien et se trouve dans le même répertoire.
Et voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#!/usr/bin/perl
# (C) Kost. Distributed under GPL.
use strict;
use XML::Simple;
use Getopt::Long;
use Cwd;
use Carp;
use warnings;
use File::Spec;
# use Data::Dumper;
my $mindmap;
my $fileperhost = 1;
my $nmapfile;
my $repertoireCourant = getcwd;
my $nomScan = File::Spec->catfile($repertoireCourant, 'leScan.xml');
my $nomMap = File::Spec->catfile($repertoireCourant, 'mapXmind.mm');
$nmapfile=$nomScan;
$mindmap=$nomMap;
#my $repertoireCourant= cwd();
#my $nomScan="/leScan.xml";
#my $nomMap="/mapXmind.mm";
#$nmapfile=$repertoireCourant . $nomScan;
#$mindmap=$repertoireCourant . $nomMap;
#$nmapfile="leScan.xml";
#$mindmap="mapXmind.mm";
$fileperhost=0;
print STDERR "Using $mindmap as output\n";
print STDERR "Processing $nmapfile...\n";
my $nmapxml;
eval {
#print qx(dir);
$nmapxml = XMLin($nmapfile, ForceArray => 1, KeyAttr => '');
} or die ("Check your XML file $nmapfile! Error parsing XML file: $!");
my $mindfile=$mindmap;
if ($fileperhost == 0) {
open (OFILE,">$mindfile") or die ("Cannot open $mindmap for writting: $!");
print OFILE '<map version="0.7.1">'."\n";
print OFILE '<node TEXT="scan">'."\n";
print OFILE '<node TEXT="hosts">'."\n";
} else {
open (GFILE,">$mindmap.mm") or die ("Cannot open $mindmap for writting: $!");
print GFILE '<map version="0.7.1">'."\n";
print GFILE '<node TEXT="scan">'."\n";
print GFILE '<node TEXT="hosts">'."\n";
}
foreach my $host (@{$nmapxml->{'host'}}) {
my %hostinfo;
$mindfile=$mindmap."-".$host->{'address'}->[0]->{'addr'}.".mm";
if ($fileperhost == 1) {
open (OFILE,">$mindfile") or die ("Cannot open $mindmap for writting: $!");
print OFILE '<map version="0.7.1">'."\n";
print OFILE '<node TEXT="scan" LINK="'.$mindmap.'.mm">'."\n";
print OFILE '<node TEXT="hosts">'."\n";
print GFILE "<node TEXT=\"$host->{'address'}->[0]->{'addr'}\" LINK=\"$mindfile\">\n";
print GFILE "</node>\n"; # host
}
print OFILE "<node TEXT=\"$host->{'address'}->[0]->{'addr'}\">\n";
print OFILE '<node TEXT="dns">'."\n";
print OFILE "<node TEXT=\"$host->{'hostnames'}->[0]->{'hostname'}->[0]->{'name'}\"/>\n";
print OFILE "</node>\n"; # dns
print OFILE '<node TEXT="OS">'."\n";
if (($host->{'os'}->[0]->{'osclass'}) || ($host->{'os'}->[0]->{'osmatch'})) {
print OFILE "<node TEXT=\"$host->{'os'}->[0]->{'osclass'}->[0]->{'type'},$hostinfo{'name'}=$host->{'os'}->[0]->{'osmatch'}->[0]->{'name'},$hostinfo{'acc'}=$host->{'os'}->[0]->{'osmatch'}->[0]->{'accuracy'}\"/>\n";
}
print OFILE "</node>\n"; # OS
# print Dumper (@{$host->{'ports'}->[0]->{'port'}});
print OFILE '<node TEXT="ports">'."\n";
if (defined({$host->{'ports'}->[0]->{'port'}})) {
print OFILE '<node TEXT="open">'."\n";
if ({$host->{'ports'}->[0]->{'port'}}) {
foreach my $port (@{$host->{'ports'}->[0]->{'port'}}) {
my $fstate;
$fstate=$port->{'state'}->[0]->{'state'};
if ($fstate eq "open") {
print OFILE "<node TEXT=\"$port->{'protocol'}/$port->{'portid'}\">\n";
print OFILE "<node TEXT=\"$port->{'service'}->[0]->{'name'};$port->{'service'}->[0]->{'product'};$port->{'service'}->[0]->{'conf'}\"/>\n";
print OFILE "</node>\n";
}
} # foreach
} # not empty
print OFILE "</node>\n";
} # defined
if (defined({$host->{'ports'}->[0]->{'extraports'}})) {
if (({$host->{'ports'}->[0]->{'extraports'}})) {
print OFILE '<node TEXT="extra">'."\n";
foreach my $port (@{$host->{'ports'}->[0]->{'extraports'}}) {
print OFILE "<node TEXT=\"$port->{'state'}\">\n";
print OFILE "<node TEXT=\"$port->{'count'}\"/>\n";
print OFILE "</node>\n"; # state
}
print OFILE "</node>\n"; # extra
}
}
print OFILE "</node>\n"; # ports node
print OFILE "</node>\n"; # host node
if ($fileperhost == 1) {
print OFILE "</node>\n"; # hosts
print OFILE "</node>\n"; # scan
print OFILE "</map>\n";
close OFILE;
}
}
if ($fileperhost == 0) {
print OFILE "</node>\n"; # hosts
print OFILE "</node>\n"; # scan
print OFILE "</map>\n";
close OFILE;
} else {
print GFILE "</node>\n"; # hosts
print GFILE "</node>\n"; # scan
print GFILE "</map>\n";
close GFILE;
} |