gpt4 book ai didi

perl - 具有私有(private) IP 的自定义 MaxmindDB (geoip2)

转载 作者:行者123 更新时间:2023-12-04 17:42:51 26 4
gpt4 key购买 nike

如何使用私有(private) IP 地址创建自定义 Maxmind 数据库。

我需要这样的东西 Customizing Maxmind DB .

我试着关注这个 Building Your Own MMDB Database for Fun and Profit .所以我将 PERL 脚本更改为以下内容:

#!/usr/bin/env perl

use strict;
use warnings;
use feature qw( say );

use MaxMind::DB::Writer::Tree;
use Net::Works::Network;

my $filename = 'users.mmdb';

# Your top level data structure will always be a map (hash). The MMDB format
# is strongly typed. Describe your data types here.
# See https://metacpan.org/pod/MaxMind::DB::Writer::Tree#DATA-TYPES


my %types = (
latitude => 'uint32',
longitude => 'uint32',
city => 'utf8_string',
country => 'utf_string',
);

my $tree = MaxMind::DB::Writer::Tree->new(

# "database_type" is some arbitrary string describing the database. At
# MaxMind we use strings like 'GeoIP2-City', 'GeoIP2-Country', etc.
database_type => 'My-IP-Data',

# "description" is a hashref where the keys are language names and the
# values are descriptions of the database in that language.
description =>
{ en => 'My database of IP data', fr => q{Mon Data d'IP}, },

# "ip_version" can be either 4 or 6
ip_version => 4,

# add a callback to validate data going in to the database
map_key_type_callback => sub { $types{ $_[0] } },

# "record_size" is the record size in bits. Either 24, 28 or 32.
record_size => 24,
);

my %address_for_employee = (
'10.1.0.0/16' => {
latitude => -12.9608,
longitude => 40.5078,
city => 'Maputo',
country => 'Mozambique',
},
'10.2.0.0/16' => {
latitude => -25.0519,
longitude => 33.6442,
city => 'Gaza',
country => 'Mozambique',
},
);

for my $address ( keys %address_for_employee ) {

# Create one network and insert it into our database
my $network = Net::Works::Network->new_from_string( string => $address );

$tree->insert_network( $network, $address_for_employee{$address} );
}

# Write the database to disk.
open my $fh, '>:raw', $filename;
$tree->write_tree( $fh );
close $fh;

say "$filename has now been created";

但运气不好。现在我收到以下错误:目前不允许在没有节点的树中进行迭代。记录类型:/usr/local/lib/perl/5.14.2/MaxMind/DB/Writer/Tree.pm 第 292 行为空。

谁能帮我创建一个带有私有(private) IP 地址的 GEOIP2 数据库?

最佳答案

这是因为你输入的ip是私有(private)ip地址。你可以通过编辑文件来解决它:

/usr/local/lib64/perl5/MaxMind/DB/Writer/Tree.pm, line 307
307 my @reserved_4 = qw(
308 0.0.0.0/8
309 10.0.0.0/8
310 100.64.0.0/10
311 127.0.0.0/8
312 169.254.0.0/16
313 172.16.0.0/12
314 192.0.0.0/29
315 192.0.2.0/24
316 192.88.99.0/24
317 192.168.0.0/16
318 198.18.0.0/15
319 198.51.100.0/24
320 203.0.113.0/24
321 224.0.0.0/4
322 240.0.0.0/4
323 );

这是所有的私有(private)IP地址。删除一些东西,这样它就可以工作了!例如:我删除“10.0.0.0/8”,然后再次执行命令:perl examples/01-getting-started.pl

关于perl - 具有私有(private) IP 的自定义 MaxmindDB (geoip2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com