Skip to content

Instantly share code, notes, and snippets.

@ytez
Last active April 17, 2020 05:56
Show Gist options
  • Save ytez/f6826f955ab1d8cd758d7c354a31b8a3 to your computer and use it in GitHub Desktop.
Save ytez/f6826f955ab1d8cd758d7c354a31b8a3 to your computer and use it in GitHub Desktop.
[Perl] PaloAlto named snapshot XML をパースする
  • Perl 5.30.1

XML::Simple で 読み込んだら普通に hash, array の操作でOK

#!/usr/bin/env perl
use 5.30.1;
use strict;
use warnings;
use utf8;
use Data::Dumper 'Dumper';
use XML::Simple;
$XML::Simple::PREFERRED_PARSER='XML::Parser'; # default: SAX
if ($0 eq __FILE__) {
my $pa_conf = __PACKAGE__->read_paloalto_xml($ARGV[0]);
say Dumper($pa_conf);
}
sub read_paloalto_xml {
my $class = shift;
my $file = shift;
#--- XML::Simple で 読み込み
my $xml = XML::Simple->new()->XMLin($file);
#--- 必要な要素を適当に取得して返却
my $system = $xml->{'devices'}->{'entry'}->{'deviceconfig'}->{'system'};
my $vsys_entry = $xml->{'devices'}->{'entry'}->{'vsys'}->{'entry'};
my $return = {
'version' => $xml->{'version'}
,'hostname' => $system->{'hostname'}
,'ip' => $system->{'ip-address'}
,'address' => $vsys_entry->{'address'}->{'entry'}
,'address-group' => $vsys_entry->{'address-group'}->{'entry'}
,'service' => $vsys_entry->{'service'}->{'entry'}
,'policy' => $vsys_entry->{'rulebase'}->{'security'}->{'rules'}->{'entry'}
,'zone' => $vsys_entry->{'zone'}->{'entry'}
};
return $return;
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment