On 12.10.2016 13:58, Yuriy M. Kaminskiy wrote:
P.S. ASN/ipv6 change in patch is completely untested (it seems produces
mangled database [as before]).
oops, above ipv6 issue was my patch fault, patch v2 attached, now
$ wget -q
http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum2v6.zip
&& unzip -q GeoIPASNum2v6.zip
$ geoip-generator-asn -6 -o GeoIPASNumv6.dat GeoIPASNum2v6.csv
$ geoiplookup6 -f GeoIPASNumv6.dat www.google.com
GeoIP ASNum V6 Edition: AS15169 Google Inc.
$ geoiplookup6 -f GeoIPASNumv6.dat 2001:67c:1270::
GeoIP ASNum V6 Edition: AS20712
(note: maxmind's original binary GeoIPASNumv6.dat also contains aliases
for various mapped ipv4; above generated GeoIPASNumv6.dat contains only
native ipv6 addresses)
--- geoip_1.6.7-2~bpo8+1/debian/src/geoip-asn-csv-to-dat.cpp.orig 2016-10-12 12:17:11.000000000 +0300
+++ geoip_1.6.7-2~bpo8+1/debian/src/geoip-asn-csv-to-dat.cpp 2016-10-12 15:41:31.000000000 +0300
@@ -478,9 +478,12 @@
for(int i = 0; i<2;++i) {
fs = buf.find(delim);
fields.push_back(buf.substr(0,fs));
- buf.erase(0,fs + 1);
+ buf.erase(0,fs + delim.length());
}
+ if (buf[0] == '"' || buf[0] == '\'')
fields.push_back(buf.substr(1, buf.length() - 2));
+ else
+ fields.push_back(buf);
}
void
@@ -489,13 +492,16 @@
std::vector<std::string> & fields)
{
std::string buf(line);
- std::string delim = ", ";
+ std::string delim = ",";
std::size_t fs;
for(int i = 0; i<3;++i) {
fs = buf.rfind(delim);
- fields.push_back(buf.substr(fs+2, buf.length()));
+ fields.push_back(buf.substr(fs+delim.length(), buf.length()));
buf.erase(fs,buf.length());
}
+ if (buf[0] == '"' || buf[0] == '\'')
+ fields.push_back(buf.substr(1, buf.length() - 2));
+ else
fields.push_back(buf.substr(0, buf.length()));
}
@@ -602,7 +608,7 @@
"Cannot parse maximum address: %s",
csv_fields[V6_CSV_FIELD_MAX_TEXT].c_str());
}
- trie.set_range(minaddr.inetbytes, maxaddr.inetbytes,
+ trie.set_range(minaddr.inet6.s6_addr, maxaddr.inet6.s6_addr,
128, leaf);
break;