IP バージョン 6 http://www.ip2location.com/free/ipv6用の単純な IP から国へのデータベースがあります 。
CREATE TABLE `ip2location_ipv6`(
`ip_from` DOUBLE,
`ip_to` DOUBLE,
`ipv6_from` VARCHAR(40),
`ipv6_to` VARCHAR(40),
`country_code` CHAR(2),
`country_name` VARCHAR(64),
INDEX `idx_ip_from` (`ip_from`),
INDEX `idx_ip_to` (`ip_to`),
INDEX `idx_ip_from_to` (`ip_from`, `ip_to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
このデータベースのサンプル行の値:
"42540528726795050063891204319802818560", "42540528806023212578155541913346768895", "2001:200::", "2001:200:ffff:ffff:ffff:ffff:ffff:ffff", "JP", "Japan"
今、私はIPアドレスの国名を取得したい. これは私のSQLです:
SQL = "SELECT country_code FROM ip2location_ipv6 WHERE " & IPNumber & " BETWEEN ip_from AND ip_to"
この sql には、IPNumber というパラメーターがあります。IPV4 では、IPNumber を簡単に計算できます。
IPV4: a.b.c.d => IPNumber = a*(256*256*256) + b*(256*256) + C*(256) + d
または私はそれを行うことができます
IPNumber = (long)(uint)IPAddress.NetworkToHostOrder((int)IPAddress.Parse("IP_address_Version_4").Address);
しかし、C# で IPV6 を解決する方法はありません。たとえば、このデータベースでこのIPの国名「2001:DB8::dcaf:BAD」を検索したい