geoip: import scripts for building the xt_geoip database

This commit is contained in:
Jan Engelhardt
2010-07-24 11:14:14 +02:00
parent 4d48511f01
commit 922a9be87d
8 changed files with 64 additions and 5 deletions

View File

@@ -1,7 +1,7 @@
# -*- Makefile -*- # -*- Makefile -*-
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
SUBDIRS = extensions SUBDIRS = extensions geoip
man_MANS := xtables-addons.8 man_MANS := xtables-addons.8

View File

@@ -74,7 +74,7 @@ fi;
AC_SUBST([regular_CFLAGS]) AC_SUBST([regular_CFLAGS])
AC_SUBST([kbuilddir]) AC_SUBST([kbuilddir])
AC_SUBST([xtlibdir]) AC_SUBST([xtlibdir])
AC_CONFIG_FILES([Makefile Makefile.iptrules Makefile.mans AC_CONFIG_FILES([Makefile Makefile.iptrules Makefile.mans geoip/Makefile
extensions/Makefile extensions/ACCOUNT/Makefile extensions/Makefile extensions/ACCOUNT/Makefile
extensions/ipset/Makefile extensions/pknock/Makefile]) extensions/ipset/Makefile extensions/pknock/Makefile])
AC_OUTPUT AC_OUTPUT

View File

@@ -4,6 +4,7 @@ HEAD
- RAWNAT: IPv6 variants erroneously rejected masks /33-/128 - RAWNAT: IPv6 variants erroneously rejected masks /33-/128
- new target xt_CHECKSUM - new target xt_CHECKSUM
- xt_length2: add support for IPv6 jumbograms - xt_length2: add support for IPv6 jumbograms
- import xt_geoip database scripts
Xtables-addons 1.27 (May 16 2010) Xtables-addons 1.27 (May 16 2010)

View File

@@ -10,8 +10,8 @@ NOTE:
The country is inputed by its ISO-3166 code. The country is inputed by its ISO-3166 code.
.PP .PP
The extra files you will need is the binary database files. They are generated The extra files you will need is the binary database files. They are generated
from a country-subnet database with the geoip_csv_iv0.pl tool, available at from a country-subnet database with the geoip_csv_iv0.pl tool that should be
http://jengelh.medozas.de/files/geoip/ . The files MUST be moved to available in /usr/lib(exec)/xtables-addons/ . The resulting files MUST be moved
/usr/share/xt_geoip/ to /usr/share/xt_geoip/
as the shared library is statically looking for this pathname (e.g. as the shared library is statically looking for this pathname (e.g.
/usr/share/xt_geoip/LE/de.iv0). /usr/share/xt_geoip/LE/de.iv0).

2
geoip/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/BE
/LE

3
geoip/Makefile.am Normal file
View File

@@ -0,0 +1,3 @@
# -*- Makefile -*-
pkglibexec_SCRIPTS = geoip_csv_iv0.pl geoip_download.sh

45
geoip/geoip_csv_iv0.pl Executable file
View File

@@ -0,0 +1,45 @@
#!/usr/bin/perl
#
# Converter for MaxMind CSV database to binary, for xt_geoip
# Copyright © Jan Engelhardt <jengelh@medozas.de>, 2008
#
# Use -b argument to create big-endian tables.
#
use Getopt::Long;
use IO::Handle;
use Text::CSV_XS; # or trade for Text::CSV
use strict;
my %country;
my %names;
my $csv = Text::CSV_XS->new({binary => 0, eol => $/}); # or Text::CSV
my $mode = "VV";
&Getopt::Long::Configure(qw(bundling));
&GetOptions("b" => sub { $mode = "NN"; });
while (my $row = $csv->getline(*ARGV)) {
if (!defined($country{$row->[4]})) {
$country{$row->[4]} = [];
$names{$row->[4]} = $row->[5];
}
my $c = $country{$row->[4]};
push(@$c, [$row->[2], $row->[3]]);
if ($. % 4096 == 0) {
print STDERR "\r\e[2K$. entries";
}
}
print STDERR "\r\e[2K$. entries total\n";
foreach my $iso_code (sort keys %country) {
printf "%5u ranges for %s %s\n",
scalar(@{$country{$iso_code}}),
$iso_code, $names{$iso_code};
open(my $fh, ">".uc($iso_code).".iv0");
foreach my $range (@{$country{$iso_code}}) {
print $fh pack($mode, $range->[0], $range->[1]);
}
close $fh;
}

8
geoip/geoip_download.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
rm -f GeoIPv6.csv{,.gz} GeoIPCountryCSV.zip GeoIPCountryWhois.csv;
wget \
http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz \
http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip;
gzip -d GeoIPv6.csv.gz;
unzip GeoIPCountryCSV.zip;