目前MaxMind对MMDB的读写支持如下
Writer:
perl
Reader:
C
C#
Java
Perl
PHP
Python
所以本文着重介绍如何快速使用perl生成mmdb文件,以及查询mmdb基本原理
工作环境:Centos 6.5
一、安装perl环境
忽略解压、cd等基础操作
- 1 .下载perl5 https://www.perl.org/get.html#unix_like 我下载的是Source版(需使用新版perl5,centos默认的perl5不支持)
- 2 .编译 安装
- configure.gnu
- make
- make install
- 3 .安装 cpan,git
- yum install cpan git
- 4 .备份替换系统perl文件
- mv /usr/bin/perl /usr/bin/perk.bak
- ln -s /usr/local/bin/perl /usr/bin/perl
5.git clone mmdb writer
6.切换至writer目录,下载cpanm并安装模块依赖(所需时间很长)
- curl -LO http://xrl.us/cpanm
- perl cpanm –installdeps .
7.安装mmdb Writer模块
- perl Build.PL
- ./Build install
二、生成库文件
- 编写perl代码,下面为样例,将读local.db文件,生成dt.mmdb文件
use MaxMind::DB::Writer::Tree;
use Net::Works::Network;
use strict;
use warnings;
use Path::Class;
use autodie;
my %types = (
product => 'utf8_string',
rack => 'utf8_string',
administrator => 'utf8_string',
room => 'utf8_string',
);
my $tree = MaxMind::DB::Writer::Tree->new(
ip_version => 4,
record_size => 24,
database_type => 'kevin_test',
languages => [ 'en' ],
description => { en => 'Used in MarkDown display' },
map_key_type_callback => sub {
$types{ $_[0] } },
);
sub tree_insert_network{
my $network = Net::Works::Network->new_from_string( string => $_[1] );
$_[0]->insert_network(
$network,
{
product => $_[2],
rack => $_[3],
administrator => $_[4],
room => $_[5]
},
);
}
sub build_tree{
my $dir = dir(".");
my $file = $dir->file($_[0]);
my $content = $file->slurp();
my $file_handle = $file->openr();
binmode($file_handle, ":utf8");
while( my $line = $file_handle->getline() ) {
$line =~ s/^\s+|\s+$//g;
if ($line eq "") {
next;
}
my @values = split('\|', $line);
for (