22.05
This commit is contained in:
Binary file not shown.
209
TSG发布版本更新记录/TSG-22.05/job/mmdb-perl-built-in.pl
Normal file
209
TSG发布版本更新记录/TSG-22.05/job/mmdb-perl-built-in.pl
Normal file
@@ -0,0 +1,209 @@
|
||||
use strict; #use this all times
|
||||
use warnings; #this too - helps a lot!
|
||||
use JSON;
|
||||
use MaxMind::DB::Writer::Tree;
|
||||
use Getopt::Long;
|
||||
use DBI;
|
||||
use utf8;
|
||||
use LWP::UserAgent;
|
||||
binmode(STDIN,":encoding(gbk)");
|
||||
|
||||
###################数据库连接信息###################
|
||||
my $url="http://{{ cm_mariadb_host }}:8080/v1/geolocation/dict/detail";
|
||||
my $token="ed04b942-7df4-4e3d-b9a9-a881ca98a867";
|
||||
|
||||
my $help = 0;
|
||||
my $outfileV6 = 'ip_v6_built_in.mmdb';
|
||||
my $outfileV4 = 'ip_v4_built_in.mmdb';
|
||||
|
||||
GetOptions("db=s" => \$outfileV6, 'help|?' => \$help, )
|
||||
or &help();
|
||||
|
||||
GetOptions("db=s" => \$outfileV4, 'help|?' => \$help, )
|
||||
or &help();
|
||||
|
||||
&help() if $help;
|
||||
my %types = (
|
||||
AREA_CODE => 'utf8_string',
|
||||
ASN => 'utf8_string',
|
||||
ISP => 'utf8_string',
|
||||
LATITUDE => 'utf8_string',
|
||||
LONGITUDE => 'utf8_string',
|
||||
COUNTRY => 'utf8_string',
|
||||
SUPER_ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
SUB_ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
LOCALITY => 'utf8_string',
|
||||
DEPENDENT_LOCALITY => 'utf8_string',
|
||||
DOUBLE_DEPENDENT_LOCALITY => 'utf8_string',
|
||||
);
|
||||
|
||||
# V6databse info
|
||||
my $treeV6 = MaxMind::DB::Writer::Tree->new(
|
||||
ip_version => 6,
|
||||
record_size => 24,
|
||||
database_type => 'IPLOCATOR',
|
||||
languages => ['en'],
|
||||
description => { en => 'My database of IP data' },
|
||||
map_key_type_callback => sub { $types{ $_[0] } },
|
||||
remove_reserved_networks => 0,
|
||||
);
|
||||
# V4databse info
|
||||
my $treeV4 = MaxMind::DB::Writer::Tree->new(
|
||||
ip_version => 4,
|
||||
record_size => 24,
|
||||
database_type => 'IPLOCATOR',
|
||||
languages => ['en'],
|
||||
description => { en => 'My database of IP data' },
|
||||
map_key_type_callback => sub { $types{ $_[0] } },
|
||||
remove_reserved_networks => 0,
|
||||
);
|
||||
$treeV4->insert_range(
|
||||
"0.0.0.0",
|
||||
"0.0.0.0",
|
||||
{
|
||||
AREA_CODE => ' ',
|
||||
ASN => ' ',
|
||||
ISP => ' ',
|
||||
LATITUDE => '00',
|
||||
LONGITUDE => '00',
|
||||
COUNTRY => changeSplit('aa'),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
LOCALITY => changeSplit('aa'),
|
||||
DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
$treeV6->insert_range(
|
||||
"0000:0000:0000:0000:0000:0000:0000:0000",
|
||||
"0000:0000:0000:0000:0000:0000:0000:0000",
|
||||
{
|
||||
AREA_CODE => ' ',
|
||||
ASN => ' ',
|
||||
ISP => ' ',
|
||||
LATITUDE => '00',
|
||||
LONGITUDE => '00',
|
||||
COUNTRY => changeSplit('aa'),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
LOCALITY => changeSplit('aa'),
|
||||
DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
},
|
||||
);
|
||||
my $sum = 0;
|
||||
my $ua = new LWP::UserAgent;
|
||||
#提取API接口中的信息,放到一个数组中
|
||||
my @dataList;
|
||||
while(1==1){
|
||||
my $request = new HTTP::Request("GET", "$url?isInitialize=1&pageSize=10000&pageNo=$sum");
|
||||
$request->header('Authorization' => 'ed04b942-7df4-4e3d-b9a9-a881ca98a867');
|
||||
my $response = $ua->request($request);
|
||||
my $json = new JSON;
|
||||
my $obj = $json->decode($response->content);
|
||||
my $list=$obj->{"data"}->{"list"};
|
||||
my $JSON =JSON->new->allow_nonref;
|
||||
my $data = $JSON->encode($list);
|
||||
my $arraydata=decode_json($data);
|
||||
$sum+=1;
|
||||
foreach my $ref (@$arraydata) {
|
||||
if(($ref->{'addrType'}) == 4){
|
||||
$treeV4->insert_range(
|
||||
$ref->{'startIp'},
|
||||
$ref->{'endIp'},
|
||||
{
|
||||
AREA_CODE => isNotBlank($ref->{'areacode'}),
|
||||
ASN => isNotBlank($ref->{'asnumber'}),
|
||||
ISP => isNotBlank($ref->{'isp'}),
|
||||
LATITUDE => isNotBlank($ref->{'latitude'}),
|
||||
LONGITUDE => isNotBlank($ref->{'longitude'}),
|
||||
COUNTRY => changeSplit(isNotBlank($ref->{'country'})),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'superAdministrativeArea'})),
|
||||
ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'administrativeArea'})),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'subAdministrativeArea'})),
|
||||
LOCALITY => changeSplit(isNotBlank($ref->{'locality'})),
|
||||
DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'dependentLocality'})),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'doubleDependentLocality'})),
|
||||
},
|
||||
);
|
||||
}elsif (($ref->{'addrType'}) == 6) {
|
||||
$treeV6->insert_range(
|
||||
$ref->{'startIp'},
|
||||
$ref->{'endIp'},
|
||||
{
|
||||
AREA_CODE => isNotBlank($ref->{'areacode'}),
|
||||
ASN => isNotBlank($ref->{'asnumber'}),
|
||||
ISP => isNotBlank($ref->{'isp'}),
|
||||
LATITUDE => isNotBlank($ref->{'latitude'}),
|
||||
LONGITUDE => isNotBlank($ref->{'longitude'}),
|
||||
COUNTRY => changeSplit(isNotBlank($ref->{'country'})),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'superAdministrativeArea'})),
|
||||
ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'administrativeArea'})),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'subAdministrativeArea'})),
|
||||
LOCALITY => changeSplit(isNotBlank($ref->{'locality'})),
|
||||
DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'dependentLocality'})),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'doubleDependentLocality'})),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
if(@$arraydata<10000){
|
||||
last;
|
||||
}
|
||||
}
|
||||
open my $fhV6, '>:raw', $outfileV6;
|
||||
$treeV6->write_tree($fhV6);
|
||||
|
||||
open my $fhV4, '>:raw', $outfileV4;
|
||||
$treeV4->write_tree($fhV4);
|
||||
|
||||
sub change {
|
||||
my $n = scalar(@_);
|
||||
my $i = $_[0];
|
||||
|
||||
my $w = ($i / 16777216) % 256;
|
||||
my $x = ($i / 65536) % 256;
|
||||
my $y = ($i / 256) % 256;
|
||||
my $z = ($i) % 256;
|
||||
|
||||
return "$w.$x.$y.$z"
|
||||
}
|
||||
|
||||
sub changeSplit {
|
||||
my $n = scalar(@_);
|
||||
my $i = $_[0];
|
||||
$i =~ s/\\b/ /g;
|
||||
|
||||
return "$i"
|
||||
}
|
||||
|
||||
sub isNotBlank {
|
||||
my $tmp = $_[1];
|
||||
|
||||
if(!$tmp) {
|
||||
return " "
|
||||
}else{
|
||||
return "$tmp"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub help {
|
||||
print "Usage: $0 -f file.json -d my-ip-data.mmdb\n";
|
||||
print 'Example json:
|
||||
{
|
||||
"records": [
|
||||
{
|
||||
"address": "6.6.6.6/28",
|
||||
"service_area": "LAX"
|
||||
}
|
||||
]
|
||||
}' . "\n";
|
||||
exit;
|
||||
};
|
||||
|
||||
209
TSG发布版本更新记录/TSG-22.05/job/mmdb-perl-user-defined.pl
Normal file
209
TSG发布版本更新记录/TSG-22.05/job/mmdb-perl-user-defined.pl
Normal file
@@ -0,0 +1,209 @@
|
||||
use strict; #use this all times
|
||||
use warnings; #this too - helps a lot!
|
||||
use JSON;
|
||||
use MaxMind::DB::Writer::Tree;
|
||||
use Getopt::Long;
|
||||
use DBI;
|
||||
use utf8;
|
||||
use LWP::UserAgent;
|
||||
binmode(STDIN,":encoding(gbk)");
|
||||
|
||||
###################数据库连接信息###################
|
||||
my $url="http://{{ cm_mariadb_host }}:8080/v1/geolocation/dict/detail";
|
||||
my $token="ed04b942-7df4-4e3d-b9a9-a881ca98a867";
|
||||
|
||||
my $help = 0;
|
||||
my $outfileV6 = 'ip_v6_user_defined.mmdb';
|
||||
my $outfileV4 = 'ip_v4_user_defined.mmdb';
|
||||
|
||||
GetOptions("db=s" => \$outfileV6, 'help|?' => \$help, )
|
||||
or &help();
|
||||
|
||||
GetOptions("db=s" => \$outfileV4, 'help|?' => \$help, )
|
||||
or &help();
|
||||
|
||||
&help() if $help;
|
||||
my %types = (
|
||||
AREA_CODE => 'utf8_string',
|
||||
ASN => 'utf8_string',
|
||||
ISP => 'utf8_string',
|
||||
LATITUDE => 'utf8_string',
|
||||
LONGITUDE => 'utf8_string',
|
||||
COUNTRY => 'utf8_string',
|
||||
SUPER_ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
SUB_ADMINISTRATIVE_AREA => 'utf8_string',
|
||||
LOCALITY => 'utf8_string',
|
||||
DEPENDENT_LOCALITY => 'utf8_string',
|
||||
DOUBLE_DEPENDENT_LOCALITY => 'utf8_string',
|
||||
);
|
||||
|
||||
# V6databse info
|
||||
my $treeV6 = MaxMind::DB::Writer::Tree->new(
|
||||
ip_version => 6,
|
||||
record_size => 24,
|
||||
database_type => 'IPLOCATOR',
|
||||
languages => ['en'],
|
||||
description => { en => 'My database of IP data' },
|
||||
map_key_type_callback => sub { $types{ $_[0] } },
|
||||
remove_reserved_networks => 0,
|
||||
);
|
||||
# V4databse info
|
||||
my $treeV4 = MaxMind::DB::Writer::Tree->new(
|
||||
ip_version => 4,
|
||||
record_size => 24,
|
||||
database_type => 'IPLOCATOR',
|
||||
languages => ['en'],
|
||||
description => { en => 'My database of IP data' },
|
||||
map_key_type_callback => sub { $types{ $_[0] } },
|
||||
remove_reserved_networks => 0,
|
||||
);
|
||||
$treeV4->insert_range(
|
||||
"0.0.0.0",
|
||||
"0.0.0.0",
|
||||
{
|
||||
AREA_CODE => ' ',
|
||||
ASN => ' ',
|
||||
ISP => ' ',
|
||||
LATITUDE => '00',
|
||||
LONGITUDE => '00',
|
||||
COUNTRY => changeSplit('aa'),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
LOCALITY => changeSplit('aa'),
|
||||
DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
$treeV6->insert_range(
|
||||
"0000:0000:0000:0000:0000:0000:0000:0000",
|
||||
"0000:0000:0000:0000:0000:0000:0000:0000",
|
||||
{
|
||||
AREA_CODE => ' ',
|
||||
ASN => ' ',
|
||||
ISP => ' ',
|
||||
LATITUDE => '00',
|
||||
LONGITUDE => '00',
|
||||
COUNTRY => changeSplit('aa'),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit('aa'),
|
||||
LOCALITY => changeSplit('aa'),
|
||||
DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit('aa'),
|
||||
},
|
||||
);
|
||||
|
||||
my $sum = 0;
|
||||
my $ua = new LWP::UserAgent;
|
||||
#提取API接口中的信息,放到一个数组中
|
||||
my @dataList;
|
||||
while(1==1){
|
||||
my $request = new HTTP::Request("GET", "$url?isInitialize=0&pageSize=10000&pageNo=$sum");
|
||||
$request->header('Authorization' => 'ed04b942-7df4-4e3d-b9a9-a881ca98a867');
|
||||
my $response = $ua->request($request);
|
||||
my $json = new JSON;
|
||||
my $obj = $json->decode($response->content);
|
||||
my $list=$obj->{"data"}->{"list"};
|
||||
my $JSON =JSON->new->allow_nonref;
|
||||
my $data = $JSON->encode($list);
|
||||
my $arraydata=decode_json($data);
|
||||
$sum+=1;
|
||||
foreach my $ref (@$arraydata) {
|
||||
if(($ref->{'addrType'}) == 4){
|
||||
$treeV4->insert_range(
|
||||
$ref->{'startIp'},
|
||||
$ref->{'endIp'},
|
||||
{
|
||||
AREA_CODE => isNotBlank($ref->{'areacode'}),
|
||||
ASN => isNotBlank($ref->{'asnumber'}),
|
||||
ISP => isNotBlank($ref->{'isp'}),
|
||||
LATITUDE => isNotBlank($ref->{'latitude'}),
|
||||
LONGITUDE => isNotBlank($ref->{'longitude'}),
|
||||
COUNTRY => changeSplit(isNotBlank($ref->{'country'})),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'superAdministrativeArea'})),
|
||||
ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'administrativeArea'})),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'subAdministrativeArea'})),
|
||||
LOCALITY => changeSplit(isNotBlank($ref->{'locality'})),
|
||||
DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'dependentLocality'})),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'doubleDependentLocality'})),
|
||||
},
|
||||
);
|
||||
}elsif (($ref->{'addrType'}) == 6) {
|
||||
$treeV6->insert_range(
|
||||
$ref->{'startIp'},
|
||||
$ref->{'endIp'},
|
||||
{
|
||||
AREA_CODE => isNotBlank($ref->{'areacode'}),
|
||||
ASN => isNotBlank($ref->{'asnumber'}),
|
||||
ISP => isNotBlank($ref->{'isp'}),
|
||||
LATITUDE => isNotBlank($ref->{'latitude'}),
|
||||
LONGITUDE => isNotBlank($ref->{'longitude'}),
|
||||
COUNTRY => changeSplit(isNotBlank($ref->{'country'})),
|
||||
SUPER_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'superAdministrativeArea'})),
|
||||
ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'administrativeArea'})),
|
||||
SUB_ADMINISTRATIVE_AREA => changeSplit(isNotBlank($ref->{'subAdministrativeArea'})),
|
||||
LOCALITY => changeSplit(isNotBlank($ref->{'locality'})),
|
||||
DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'dependentLocality'})),
|
||||
DOUBLE_DEPENDENT_LOCALITY => changeSplit(isNotBlank($ref->{'doubleDependentLocality'})),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
if(@$arraydata<10000){
|
||||
last;
|
||||
}
|
||||
}
|
||||
open my $fhV6, '>:raw', $outfileV6;
|
||||
$treeV6->write_tree($fhV6);
|
||||
|
||||
open my $fhV4, '>:raw', $outfileV4;
|
||||
$treeV4->write_tree($fhV4);
|
||||
|
||||
sub change {
|
||||
my $n = scalar(@_);
|
||||
my $i = $_[0];
|
||||
|
||||
my $w = ($i / 16777216) % 256;
|
||||
my $x = ($i / 65536) % 256;
|
||||
my $y = ($i / 256) % 256;
|
||||
my $z = ($i) % 256;
|
||||
|
||||
return "$w.$x.$y.$z"
|
||||
}
|
||||
|
||||
sub changeSplit {
|
||||
my $n = scalar(@_);
|
||||
my $i = $_[0];
|
||||
$i =~ s/\\b/ /g;
|
||||
|
||||
return "$i"
|
||||
}
|
||||
|
||||
sub isNotBlank {
|
||||
my $tmp = $_[1];
|
||||
|
||||
if(!$tmp) {
|
||||
return " "
|
||||
}else{
|
||||
return "$tmp"
|
||||
}
|
||||
}
|
||||
|
||||
sub help {
|
||||
print "Usage: $0 -f file.json -d my-ip-data.mmdb\n";
|
||||
print 'Example json:
|
||||
{
|
||||
"records": [
|
||||
{
|
||||
"address": "6.6.6.6/28",
|
||||
"service_area": "LAX"
|
||||
}
|
||||
]
|
||||
}' . "\n";
|
||||
exit;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user