mirror of
git://git.code.sf.net/p/xtables-addons/xtables-addons
synced 2025-09-07 21:25:12 +02:00
geoip: selective endianness catalog generation
This commit is contained in:

committed by
Jan Engelhardt

parent
56e5970c64
commit
2f37af43c5
@@ -8,23 +8,45 @@ use IO::Handle;
|
|||||||
use Text::CSV_XS; # or trade for Text::CSV
|
use Text::CSV_XS; # or trade for Text::CSV
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
|
my $le32 = pack('V', 0x10000000);
|
||||||
|
my $be32 = pack('N', 0x10000000);
|
||||||
|
my $u32 = undef;
|
||||||
|
|
||||||
|
sub wantBE { (!$u32 || $u32 eq $be32); }
|
||||||
|
sub wantLE { (!$u32 || $u32 eq $le32); }
|
||||||
|
|
||||||
my $csv = Text::CSV_XS->new({
|
my $csv = Text::CSV_XS->new({
|
||||||
allow_whitespace => 1,
|
allow_whitespace => 1,
|
||||||
binary => 1,
|
binary => 1,
|
||||||
eol => $/,
|
eol => $/,
|
||||||
}); # or Text::CSV
|
}); # or Text::CSV
|
||||||
my $target_dir = ".";
|
my $target_dir = ".";
|
||||||
|
my $native_only = 0;
|
||||||
|
|
||||||
&Getopt::Long::Configure(qw(bundling));
|
&Getopt::Long::Configure(qw(bundling));
|
||||||
&GetOptions(
|
&GetOptions(
|
||||||
"D=s" => \$target_dir,
|
"D=s" => \$target_dir,
|
||||||
|
"n" => \$native_only,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!-d $target_dir) {
|
if (!-d $target_dir) {
|
||||||
print STDERR "Target directory $target_dir does not exist.\n";
|
print STDERR "Target directory $target_dir does not exist.\n";
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
foreach (qw(LE BE)) {
|
my @dbs = qw(LE BE);
|
||||||
|
if ($native_only) {
|
||||||
|
$u32 = pack('L', 0x10000000);
|
||||||
|
if ($u32 eq $le32) {
|
||||||
|
@dbs = qw(LE);
|
||||||
|
} elsif ($u32 eq $be32) {
|
||||||
|
@dbs = qw(BE);
|
||||||
|
} else {
|
||||||
|
print STDERRR "Can't determine endianness.\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (@dbs) {
|
||||||
my $dir = "$target_dir/$_";
|
my $dir = "$target_dir/$_";
|
||||||
if (!-e $dir && !mkdir($dir)) {
|
if (!-e $dir && !mkdir($dir)) {
|
||||||
print STDERR "Could not mkdir $dir: $!\n";
|
print STDERR "Could not mkdir $dir: $!\n";
|
||||||
@@ -80,43 +102,55 @@ sub dump_one
|
|||||||
scalar(@{$country->{pool_v6}}),
|
scalar(@{$country->{pool_v6}}),
|
||||||
$iso_code, $country->{name};
|
$iso_code, $country->{name};
|
||||||
|
|
||||||
$file = "$target_dir/LE/".uc($iso_code).".iv6";
|
if (wantLE) {
|
||||||
if (!open($fh_le, "> $file")) {
|
$file = "$target_dir/LE/".uc($iso_code).".iv6";
|
||||||
print STDERR "Error opening $file: $!\n";
|
if (!open($fh_le, "> $file")) {
|
||||||
exit 1;
|
print STDERR "Error opening $file: $!\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
foreach my $range (@{$country->{pool_v6}}) {
|
||||||
|
print $fh_le &ip6_swap($range->[0]), &ip6_swap($range->[1]);
|
||||||
|
}
|
||||||
|
close $fh_le;
|
||||||
}
|
}
|
||||||
$file = "$target_dir/BE/".uc($iso_code).".iv6";
|
if (wantBE) {
|
||||||
if (!open($fh_be, "> $file")) {
|
$file = "$target_dir/BE/".uc($iso_code).".iv6";
|
||||||
print STDERR "Error opening $file: $!\n";
|
if (!open($fh_be, "> $file")) {
|
||||||
exit 1;
|
print STDERR "Error opening $file: $!\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
foreach my $range (@{$country->{pool_v6}}) {
|
||||||
|
print $fh_be $range->[0], $range->[1];
|
||||||
|
}
|
||||||
|
close $fh_be;
|
||||||
}
|
}
|
||||||
foreach my $range (@{$country->{pool_v6}}) {
|
|
||||||
print $fh_be $range->[0], $range->[1];
|
|
||||||
print $fh_le &ip6_swap($range->[0]), &ip6_swap($range->[1]);
|
|
||||||
}
|
|
||||||
close $fh_le;
|
|
||||||
close $fh_be;
|
|
||||||
|
|
||||||
printf "%5u IPv4 ranges for %s %s\n",
|
printf "%5u IPv4 ranges for %s %s\n",
|
||||||
scalar(@{$country->{pool_v4}}),
|
scalar(@{$country->{pool_v4}}),
|
||||||
$iso_code, $country->{name};
|
$iso_code, $country->{name};
|
||||||
|
|
||||||
$file = "$target_dir/LE/".uc($iso_code).".iv4";
|
if (wantLE) {
|
||||||
if (!open($fh_le, "> $file")) {
|
$file = "$target_dir/LE/".uc($iso_code).".iv4";
|
||||||
print STDERR "Error opening $file: $!\n";
|
if (!open($fh_le, "> $file")) {
|
||||||
exit 1;
|
print STDERR "Error opening $file: $!\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
foreach my $range (@{$country->{pool_v4}}) {
|
||||||
|
print $fh_le pack("VV", $range->[0], $range->[1]);
|
||||||
|
}
|
||||||
|
close $fh_le;
|
||||||
}
|
}
|
||||||
$file = "$target_dir/BE/".uc($iso_code).".iv4";
|
if (wantBE) {
|
||||||
if (!open($fh_be, "> $file")) {
|
$file = "$target_dir/BE/".uc($iso_code).".iv4";
|
||||||
print STDERR "Error opening $file: $!\n";
|
if (!open($fh_be, "> $file")) {
|
||||||
exit 1;
|
print STDERR "Error opening $file: $!\n";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
foreach my $range (@{$country->{pool_v4}}) {
|
||||||
|
print $fh_be pack("NN", $range->[0], $range->[1]);
|
||||||
|
}
|
||||||
|
close $fh_be;
|
||||||
}
|
}
|
||||||
foreach my $range (@{$country->{pool_v4}}) {
|
|
||||||
print $fh_le pack("VV", $range->[0], $range->[1]);
|
|
||||||
print $fh_be pack("NN", $range->[0], $range->[1]);
|
|
||||||
}
|
|
||||||
close $fh_le;
|
|
||||||
close $fh_be;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ip6_pack
|
sub ip6_pack
|
||||||
|
Reference in New Issue
Block a user