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 :
Nom : errorExeScript1.png
Affichages : 181
Taille : 9,1 Ko

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}