弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

Team Cymruが死亡したのでip2locationに切り替えw

LANG=C whois -H -h whois.cymru.com -v 133.43.80.5
とかやってIPアドレスからASNを求めていたのだけど、どうやらTeam Cymruは攻略され閉店してしまったみたいだ。

なので代わりにIP2Location™ LITE IP-ASN Databaseを使う。

CREATE TABLE ip2location_asn(
        ip_from bigint NOT NULL,
        ip_to bigint NOT NULL,
        cidr character varying(18) NOT NULL,
        asn character varying(5) NOT NULL,
        "as" character varying(256) NOT NULL,
        CONSTRAINT ip2location_asn_pkey PRIMARY KEY (ip_from, ip_to)
);
表を追加して…

copy.sqlファイル

COPY hogedb.ip2location_asn FROM '/tmp/IP2LOCATION-LITE-ASN.CSV' WITH CSV QUOTE AS '"';
copy.shファイル
LANG=C psql -U postgres -d hogedb -h localhost -f copy.sql

#!/usr/bin/perl

use utf8;
use strict;
use Encode;

use DBD::Pg;

my $dbh;

sub ip2asn {
        my ($ip) = @_;
        my @b = split(/\./, $ip);
        my $ip_i = 16777216*$b[0] + 65536*$b[1] + 256*$b[2] + $b[3];

        my $sql = "select asn,\"as\",cidr from ip2location_asn where ip_from <= " . $ip_i . " and ip_to >= " . $ip_i;
        my $data = $dbh->selectall_arrayref($sql);
        my $asn_s;
        foreach my $rec (@$data) {
                $asn_s = $rec->[0] . " " . $rec->[1] . " " . $rec->[2];
        }
        $asn_s;
}

$dbh = DBI->connect("dbi:Pg:dbname=hogedb;host=localhost", "hoge", "hoge");
$dbh->{pg_enable_utf8} = 1;
my $asn_s = &ip2asn("133.43.80.5");
print STDERR $asn_s . "\n";
$dbh->disconnect;

実行。

$ perl asn_t.pl
10014 Nihon University 133.43.0.0/16
$

投稿されたコメント:

コメント
コメントは無効になっています。