[58950] in North American Network Operators' Group
Re: Full Internet ASN <--> AS Name resolution
daemon@ATHENA.MIT.EDU (Mike Leber)
Fri Jun 6 22:31:29 2003
Date: Fri, 6 Jun 2003 19:30:13 -0700 (PDT)
From: Mike Leber <mleber@he.net>
To: Mourad BERKANE <mourad.berkane@lambdanet.fr>
Cc: "'nanog@merit.edu'" <nanog@merit.edu>
In-Reply-To: <8D91FF5277472A45A0A8F9654A14649701494A69@frlnparexcha03.lambdanet.fr>
Errors-To: owner-nanog-outgoing@merit.edu
On Fri, 6 Jun 2003, Mourad BERKANE wrote:
> Hi NANOGers,
>
> Could someone forward me a .txt file including FULL INTERNET (ARIN + RIPE +
> APNIC) ASN <--> AS Name resolution table?
>
> I don't want to compile following regional dbase :-)
>
> <ftp://ftp.arin.net/netinfo/asn.txt> ftp://ftp.arin.net/netinfo/asn.txt
> <ftp://ftp.apnic.net/pub/apnic/dbase/data/rpsl>
> ftp://ftp.apnic.net/pub/apnic/dbase/data/rpsl
> <ftp://ftp.ripe.net/ripe/dbase/> ftp://ftp.ripe.net/ripe/dbase/
Here is something I wrote that generates the .txt file you are looking
for. It's a hack. No appologies or warranties provided. ;)
It is based on the original script provided earlier by Hroi Sigurdsson
(thank you):
#!/usr/bin/perl
# extractasnames.pl
# By Mike Leber 06/06/2003
# Original By Hroi Sigurdsson
# as is, no warranty, use at your own risk.
use strict;
use Net::FTP;
my $gVerbose = $ARGV[0] eq "-v";
my @sources = qw(
ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.aut-num.gz
ftp://ftp.apnic.net/public/apnic/whois-data/APNIC/split/apnic.db.aut-num.gz
ftp://ftp.radb.net/radb/dbase/arin.db.gz
ftp://ftp.radb.net/radb/dbase/radb.db.gz
ftp://ftp.arin.net/info/asn.txt
);
my %autnums;
for my $source ( @sources )
{
read_file( $source );
}
map {printf "%d: %s\n" ,$_ ,$autnums{$_}} sort {$a <=> $b} keys %autnums;
exit(0);
sub read_file
{
my( $source ) = @_;
print "$source\n" if $gVerbose;
my $host;
my $file;
my $remotefile;
($host,$remotefile) = ( $source =~ /^ftp:\/\/([^\/]+)\/(.*)$/ );
system( "mkdir data" ) if ! -e "data";
my $localfile;
($localfile) = ( $remotefile =~ /\/([a-z\.\-]+)$/ );
$localfile = "data/$localfile";
print "host: $host rfile: $remotefile lfile: $localfile\n"
if $gVerbose;
my ($dev,$ino,$mode,$nlink,$uid,$gid,
$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)
= stat( $localfile );
# refresh atleast once a month.
if ( (! -e $localfile) || time - $mtime > 30 * 24 * 3600 )
{
my $ftp = Net::FTP->new($host)
|| die "Can't connect: $@\n";
$ftp->login("anonymous","me\@me.com")
|| die "Couldn't login\n";
$ftp->type("I")
|| die "Couldn't change type to binary\n";
$ftp->get($remotefile,$localfile)
|| die "Couldn't get $remotefile\n";
$ftp->quit();
print "successfully FTP'd $remotefile\n"
if $gVerbose;
}
my $lines = 0;
if ( $localfile =~ /\.gz$/ )
{
open( FILE, "gzip -d -c $localfile |" )
|| die "Unable to open $localfile";
my $autnum = 0;
my $descr = '';
while (<FILE>)
{
if(/^aut-num:\s+AS(\d+)$/)
{
$autnum = $1;
}
if($autnum && /^descr:\s+(.*)$/)
{
$descr = $1;
$autnums{$autnum} = $descr;
$autnum = 0;
}
$lines++;
}
close FILE;
}
else
{
open( FILE, "< $localfile" )
|| die "Unable to open $localfile";
while (<FILE>)
{
if(/^\s+(\d+)\s+(\S+)\s/)
{
my $autnum = $1;
my $descr = $2;
$autnums{$autnum} = $descr;
}
$lines++;
}
close FILE;
}
print "lines: $lines\n"
if $gVerbose;
}
+----------------- H U R R I C A N E - E L E C T R I C -----------------+
| Mike Leber Direct Internet Connections Voice 510 580 4100 |
| Hurricane Electric Web Hosting Colocation Fax 510 580 4151 |
| mleber@he.net http://www.he.net |
+-----------------------------------------------------------------------+