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 :
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; }
Partager