From a356d803be9cd0003b485a6c4cbb2b2844e43f25 Mon Sep 17 00:00:00 2001 From: Ryan Voots Date: Fri, 12 May 2017 15:39:44 -0700 Subject: [PATCH 1/2] Add some ASN db creation scripts --- asndb/README.md | 1 + asndb/mkasn.pl | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 asndb/README.md create mode 100755 asndb/mkasn.pl diff --git a/asndb/README.md b/asndb/README.md new file mode 100644 index 0000000..1f7c122 --- /dev/null +++ b/asndb/README.md @@ -0,0 +1 @@ +ASN db comes from https://iptoasn.com/ diff --git a/asndb/mkasn.pl b/asndb/mkasn.pl new file mode 100755 index 0000000..5dd2cd7 --- /dev/null +++ b/asndb/mkasn.pl @@ -0,0 +1,39 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use autodie; +use DBI; + +sub fmtip($) { + my $ip = shift; + sprintf "%03d.%03d.%03d.%03d", split(/\./, $ip); +} + +open(my $tsv, "<", "ip2asn-v4.tsv"); + +my $dbh = DBI->connect("dbi:SQLite:dbname=asn.db", "", "", {RaiseError => 1}); + +$dbh->do("DROP TABLE IF EXISTS asn;"); +$dbh->do(q{CREATE TABLE asn ( + start varchar(15) NOT NULL, + end varchar(15) NOT NULL, + asn INTEGER NOT NULL, + country TEXT, + desc TEXT +); +CREATE INDEX asn_start ON asn (start); +CREATE INDEX asn_end ON asn (end); +CREATE INDEX ON asn_asn ON asn (asn);}); + +$dbh->begin_work; +my $insert_sth = $dbh->prepare("INSERT INTO asn (start, end, asn, country, desc) VALUES (?, ?, ?, ?, ?);"); + +while (my $line = <$tsv>) { + chomp $line; + my ($start, $end, $asn, $country, $desc) = split /\t/, $line; + + printf "%s - %s\n", fmtip($start), fmtip($end); + $insert_sth->execute(fmtip $start, fmtip $end, $asn, $country, $desc); +} +$dbh->commit(); From e89c203cdd68f6c318d78a0720a5b0aecd6d5826 Mon Sep 17 00:00:00 2001 From: Ryan Voots Date: Fri, 12 May 2017 16:55:56 -0700 Subject: [PATCH 2/2] Clean out unroutable addresses --- asndb/mkasn.pl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/asndb/mkasn.pl b/asndb/mkasn.pl index 5dd2cd7..4da440f 100755 --- a/asndb/mkasn.pl +++ b/asndb/mkasn.pl @@ -12,7 +12,7 @@ sub fmtip($) { open(my $tsv, "<", "ip2asn-v4.tsv"); -my $dbh = DBI->connect("dbi:SQLite:dbname=asn.db", "", "", {RaiseError => 1}); +my $dbh = DBI->connect("dbi:SQLite:dbname=../var/asn.db", "", "", {RaiseError => 1}); $dbh->do("DROP TABLE IF EXISTS asn;"); $dbh->do(q{CREATE TABLE asn ( @@ -32,8 +32,16 @@ my $insert_sth = $dbh->prepare("INSERT INTO asn (start, end, asn, country, desc) while (my $line = <$tsv>) { chomp $line; my ($start, $end, $asn, $country, $desc) = split /\t/, $line; - + next if $asn eq 0; printf "%s - %s\n", fmtip($start), fmtip($end); $insert_sth->execute(fmtip $start, fmtip $end, $asn, $country, $desc); } +#$dbh->commit(); +#$dbh->begin_work(); +for my $ip (0..255) { + my $rv = $dbh->do("DELETE FROM asn WHERE start <= ? AND end >= ?", {}, fmtip "10.$ip.0.0", fmtip "10.$ip.0.0"); + $rv+=$dbh->do("DELETE FROM asn WHERE start <= ? AND end >= ?", {}, fmtip "172.$ip.0.0", fmtip "172.$ip.0.0") if $ip >= 16 || $ip <= 32; + $rv+=$dbh->do("DELETE FROM asn WHERE start <= ? AND end >= ?", {}, fmtip "192.168.$ip.0", fmtip "192.168.$ip.0"); + print "Removed $rv for $ip\n"; +} $dbh->commit();