Skip to content

Commit

Permalink
first committed
Browse files Browse the repository at this point in the history
  • Loading branch information
张锐 committed Feb 24, 2016
1 parent a036a56 commit 21b998f
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 0 deletions.
Binary file added MaxMind_DB_Writer_perl_create.mmdb
Binary file not shown.
160 changes: 160 additions & 0 deletions csv_to_mmdb.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#/usr/bin/env perl

use MaxMind::DB::Writer::Tree;
use Net::Works::Network;
use open qw(:std :utf8);

if(@ARGV != 2){
print "Usage: perl csv_file output_mmdb_file.\n";
}

open (FILE, @ARGV[0]) || die "Can not open file: @ARGV[0]\n";
@line=<FILE>;

my %types = (
city => 'map',
country => 'map',
county => 'map',
registered_country => 'map',
subdivisions => 'map',
location => 'map',
continent => 'map',
geoname_id => 'uint32',
id => 'uint32',
names => 'map',
isp => 'map',
en => 'utf8_string',
zh_CN => 'utf8_string',
de => 'utf8_string',
fr => 'utf8_string',
ru => 'utf8_string',
spa => 'utf8_string',
jp => 'utf8_string',
pt => 'utf8_string',
code => 'utf8_string',
iso_code => 'utf8_string',
org => 'utf8_string',
latitude => 'double',
longitude => 'double',
time_zone => 'utf8_string',
states => [ 'array', 'utf8_string' ],
);

my $tree = MaxMind::DB::Writer::Tree->new(
ip_version => 4,
record_size => 32,
database_type => 'GeoIP',
languages => ['en'],
description => { en => 'GeoIP database' },
map_key_type_callback => sub { $types{ $_[0] } },
);
my $i = 0;

foreach (@line){
$i++;
if($i != 1){
my $linestr = $_;
my @arr = ();
my $position = 0;
my $end = -1;
my $start = 0;
if(substr($linestr, 0, 1) eq '"'){
$linestr = substr($linestr, 1, length($linestr)-1);
$end = index($linestr, '"');
$start = 1;
}
else{
$end = index($linestr, ',');
}
while($end != -1){
if($end == 0){
$str = "";
}
else{
$str = substr($linestr, 0, $end);
}
push(@arr, $str);
$end++;
$linestr = substr($linestr, $end+$start, length($linestr)-$end);
if(substr($linestr, 0, 1) eq '"'){
$linestr = substr($linestr, 1, length($linestr)-1);
$end = index($linestr, '"');
$start = 1;
}
else{
$end = index($linestr, ',');
$start = 0;
}
}
$linestr =~ s/\"//g;
push(@arr, $linestr);

$scalar = @arr;
print "$arr[0]\n";
if($arr[0] != "" && $scalar == 22){
my $network
= Net::Works::Network->new_from_string( string => $arr[0] );
$arr[21] =~ s/\n//;
$tree->insert_network(
$network,
{
continent => {
code => $arr[1],
names => {
en => $arr[2],
zh_CN => $arr[3],
},
},
country => {
iso_code => $arr[4],
names => {
en => $arr[5],
zh_CN => $arr[6],
},
},
subdivisions => {
iso_code => $arr[7],
names => {
en => $arr[8],
zh_CN => $arr[9],
},
},
city => {
id => $arr[10]+0,
names => {
en => $arr[11],
zh_CN => $arr[12],
},
},
county => {
id => $arr[13]+0,
names => {
en => $arr[14],
zh_CN => $arr[15],
},
},
isp => {
id => $arr[16]+0,
names => {
zh_CN => $arr[17],
},
},
location => {
time_zone => $arr[18],
org => $arr[19],
latitude => $arr[20]+0.0,
longitude => $arr[21]+0.0,
},
},
);
}
else{
print $line;
}
}
}

close FILE;
open my $fh, '>:raw', "@ARGV[1]";
$tree->write_tree($fh);
close $fh;
6 changes: 6 additions & 0 deletions read_mmdb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import maxminddb
import json
reader = maxminddb.open_database('1.mmdb')
result = reader.get('1.0.16.1')
reader.close()
print json.dumps(result, indent=2)
4 changes: 4 additions & 0 deletions read_mmdb.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
require 'maxminddb'
db = MaxMindDB.new('/tmp/1.mmdb')
ret = db.lookup('1.0.16.1')
print ret.found?
10 changes: 10 additions & 0 deletions source.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
network,continent_code,continent_name_en,continent_name_zh,country_iso_code,country_name_en,country_name_zh,province_iso_code,province_name_en,province_name_zh,city_id,city_name_en,city_name_zh,county_id,county_name_en,county_name_zh,isp_id,isp_name,time_zone,org,latitude,longitude
0.0.0.0/8,IANA,Reserved for Loopback [RFC1122],IANA保留地址,本地地址[RFC1122],,,,,,,0,,,0,,,0,,,,,
1.0.0.0/24,OC,Oceania,大洋洲,AU,Australia,澳大利亚,,,,0,,,0,,,2,Anycast,,亚太互联网络信息中心,-27,133.0000
1.0.1.0/24,AS,Asia,亚洲,CN,China,中国,35,Fujian,福建省,0,,,0,,,10000,电信,Asia/Shanghai,,26.0501182957,117.98494312
1.0.2.0/23,AS,Asia,亚洲,CN,China,中国,35,Fujian,福建省,0,,,0,,,10000,电信,Asia/Shanghai,,26.0501182957,117.98494312
1.0.4.0/22,OC,Oceania,大洋洲,AU,Australia,澳大利亚,,,,0,,,0,,,0,,,墨尔本BigRed集团,-27,133.0000
1.0.8.0/21,AS,Asia,亚洲,CN,China,中国,44,Guangdong,广东省,0,,,0,,,10000,电信,Asia/Shanghai,,23.408003729,113.394817559
1.0.16.0/20,AS,Asia,亚洲,JP,Japan,日本,13,Tokyo,,0,Tokyo,东京,0,,,0,,Asia/Tokyo,东京I2TsInc,35.685,139.7514
1.0.32.0/19,AS,Asia,亚洲,CN,China,中国,44,Guangdong,广东省,0,,,0,,,10000,电信,Asia/Shanghai,,23.408003729,113.394817559
1.0.64.0/20,AS,Asia,亚洲,JP,Japan,日本,34,Hiroshima,,0,Hiroshima,,0,,,0,,Asia/Tokyo,広島県中区大手町Energia通信公司,34.3963,132.4594

0 comments on commit 21b998f

Please sign in to comment.