Blob Blame History Raw
From 845b5e00f87b14d635fc8d531c05f4c1df208fbc Mon Sep 17 00:00:00 2001
From: IP2Location <support@ip2location.com>
Date: Thu, 27 May 2021 07:21:39 +0800
Subject: [PATCH] Updated perl scrript to generate latest BIN format.

---
 data/ip-country.pl | 70 +++++++++++++++++++++++++++++-----------------
 1 file changed, 44 insertions(+), 26 deletions(-)

diff --git a/data/ip-country.pl b/data/ip-country.pl
index ed5add7..b7df799 100755
--- a/data/ip-country.pl
+++ b/data/ip-country.pl
@@ -23,7 +23,7 @@ sub csv2bin_ipv4 {
 	my @sorted_country;
 
 	print STDOUT "$ipv4_infilename to $ipv4_outfilename conversion started (can take some time).\n";
-		
+
 	open IN, "<$ipv4_infilename" or die "Error open $ipv4_infilename";
 
 	my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($ipv4_infilename);
@@ -45,12 +45,12 @@ sub csv2bin_ipv4 {
 		$ipv4_count++;
 	}
 	close IN;
-	
+
 	$country{"-"}{"-"}++;
 	$ipv4_count++;
-	
+
 	my $addr = $ipv4_base + $ipv4_count * $longsize * $columnsize;
-	
+
 	@sorted_country = sort keys(%country);
 	foreach my $co (@sorted_country) {
 		$country{$co}{"ADDR"} = $addr;
@@ -58,10 +58,10 @@ sub csv2bin_ipv4 {
 	}
 
 	my ($second, $minute, $hour, $day, $month, $year, $weekday, $dayofyear, $isdst) = gmtime($mtime);
-	
+
 	open OUT, ">$ipv4_outfilename" or die "Error writing $ipv4_outfilename";
 	binmode(OUT);
-	
+
 	print OUT pack("C", $dbtype);
 	print OUT pack("C", $columnsize);
 	print OUT pack("C", $year - 100);
@@ -73,22 +73,31 @@ sub csv2bin_ipv4 {
 	print OUT pack("V", $ipv6_base + 1);
 	print OUT pack("V", $ipv4_index_base + 1);
 	print OUT pack("V", $ipv6_index_base + 1);
-	
-	foreach my $i (29 .. 63) {
+
+	# added product code and types 14/08/2020
+	print OUT pack("C", 1); # legacy:0 ip2location:1 ip2proxy:2
+	print OUT pack("C", 2); # legacy:0 commercial:1 lite:2
+
+	# bytes 31-34 will be append file size at later state
+	foreach my $i (31 .. 34) {
 		print OUT pack("C", 0);
 	}
-	
+
+	foreach my $i (35 .. 63) {
+		print OUT pack("C", 0);
+	}
+
 	foreach my $c (sort {$a <=> $b} keys(%ipv4_index_row_min)) {
 		print OUT pack("V", $ipv4_index_row_min{$c});
 		print OUT pack("V", $ipv4_index_row_max{$c});
 	}
-	
+
 	my $p = tell(OUT);
 	if ($p != 524352) {
 		print STDERR "$ipv4_outfilename Index Out of Range\b";
 		die;
 	}
-	
+
 	open IN, "<$ipv4_infilename" or die;
 	while (<IN>) {
 		chomp($_);
@@ -99,10 +108,10 @@ sub csv2bin_ipv4 {
 		print OUT pack("V", $country{$array[2]}{"ADDR"});
 	}
 	close IN;
-	
+
 	print OUT pack("V", 4294967295);
 	print OUT pack("V", $country{"-"}{"ADDR"});
-		
+
 	foreach my $co (@sorted_country) {
 		print OUT pack("C", length($co));
 		print OUT $co;
@@ -117,9 +126,9 @@ sub csv2bin_ipv4 {
 		print OUT $country{$co}{"LONG"};
 	}
 	close OUT;
-	
+
 	print STDOUT "$ipv4_infilename to $ipv4_outfilename conversion done.\n";
-	
+
 }
 
 
@@ -174,7 +183,7 @@ sub csv2bin_ipv6 {
 		$ipv4_count++;
 	}
 	close IN;
-	
+
 	open IN, "<$ipv6_infilename" or die "Error open $ipv6_infilename";
 
 	($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($ipv4_infilename);
@@ -205,7 +214,7 @@ sub csv2bin_ipv6 {
 
 	$ipv6_base = $ipv4_base + $ipv4_count * $longsize * $columnsize;
 	my $addr = $ipv6_base + $ipv6_count * $longsize * ($columnsize + 3); #IPv6 address range is 4 bytes vs 1 byte in IPv4
-	
+
 	@sorted_country = sort keys(%country);
 	foreach my $co (@sorted_country) {
 		$country{$co}{"ADDR"} = $addr;
@@ -216,7 +225,7 @@ sub csv2bin_ipv6 {
 
 	open OUT, ">$ipv6_outfilename" or die "Error writing $ipv6_outfilename";
 	binmode(OUT); #binary mode
-	
+
 	print OUT pack("C", $dbtype);
 	print OUT pack("C", $columnsize);
 	print OUT pack("C", $year - 100);
@@ -229,7 +238,16 @@ sub csv2bin_ipv6 {
 	print OUT pack("V", $ipv4_index_base + 1);
 	print OUT pack("V", $ipv6_index_base + 1);
 
-	foreach my $i (29 .. 63) {
+	# added product code and types 14/08/2020
+	print OUT pack("C", 1); # legacy:0 ip2location:1 ip2proxy:2
+	print OUT pack("C", 2); # legacy:0 commercial:1 lite:2
+
+	# bytes 31-34 will be append file size at later state
+	foreach my $i (31 .. 34) {
+		print OUT pack("C", 0);
+	}
+
+	foreach my $i (35 .. 63) {
 		print OUT pack("C", 0);
 	}
 
@@ -242,13 +260,13 @@ sub csv2bin_ipv6 {
 		print OUT pack("V", $ipv6_index_row_min{$c});
 		print OUT pack("V", $ipv6_index_row_max{$c});
 	}
-	
+
 	my $p = tell(OUT);
 	if ($p != 1048640) {
 		print STDERR "$ipv6_outfilename $p Index Out of Range\b";
 		die;
 	}
-	
+
 	open IN, "<$ipv4_infilename" or die;
 	while (<IN>) {
 		chomp($_);
@@ -262,10 +280,10 @@ sub csv2bin_ipv6 {
 		print OUT pack("V", $country{$array[2]}{"ADDR"});
 	}
 	close IN;
-	
+
 	print OUT pack("V", 4294967295);
 	print OUT pack("V", $country{"-"}{"ADDR"});
- 	
+
 	# export IPv6 range
 	open IN, "<$ipv6_infilename" or die;
 	while (<IN>) {
@@ -274,10 +292,10 @@ sub csv2bin_ipv6 {
 		print OUT pack("V", $country{$array[2]}{"ADDR"});
 	}
 	close IN;
- 	
+
 	print OUT &int2bytes("340282366920938463463374607431768211455");
 	print OUT pack("V", $country{"-"}{"ADDR"});
-	
+
 	foreach my $co (@sorted_country) {
 		print OUT pack("C", length($co));
 		print OUT $co;
@@ -291,7 +309,7 @@ sub csv2bin_ipv6 {
 		print OUT pack("C", length($country{$co}{"LONG"}));
 		print OUT $country{$co}{"LONG"};
 	}
-	close OUT;	
+	close OUT;
 
 	print STDOUT "$ipv6_infilename + $ipv4_infilename to $ipv6_outfilename conversion done.\n";
 }