Example #1
0
        public void ResolveIPv6_WorksCorrectly()
        {
            var target = new IP2CountryResolver(
                new MockDataSource <IPRangeCountry>(new[]
            {
                new IPRangeCountry {
                    Country = "AA", Start = IPAddress.Parse("::1"), End = IPAddress.Parse("::F")
                },
                new IPRangeCountry {
                    Country = "BB", Start = IPAddress.Parse("::10"), End = IPAddress.Parse("::1F")
                },
                new IPRangeCountry {
                    Country = "CC", Start = IPAddress.Parse("::20"), End = IPAddress.Parse("::2F")
                }
            })
                );


            Assert.IsNull(target.Resolve("::0"));
            Assert.AreEqual("AA", target.Resolve("::1")?.Country);
            Assert.AreEqual("AA", target.Resolve("::F")?.Country);
            Assert.AreEqual("BB", target.Resolve("::10")?.Country);
            Assert.AreEqual("BB", target.Resolve("::1F")?.Country);
            Assert.AreEqual("CC", target.Resolve("::20")?.Country);
            Assert.AreEqual("CC", target.Resolve("::2F")?.Country);
            Assert.IsNull(target.Resolve("::30"));
        }
Example #2
0
        static async Task Main(string[] args)
        {
            // Download all registry delegation latest files and store/"cache" them in a temp directory
            var d        = new CachingWebClient();
            var temppath = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), "delegationcache")).FullName;
            await Task.WhenAll(
                d.DownloadAsync("http://ftp.ripe.net/ripe/stats/delegated-ripencc-extended-latest", Path.Combine(temppath, "ripe.dat")),
                d.DownloadAsync("http://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest", Path.Combine(temppath, "apnic.dat")),
                d.DownloadAsync("http://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest", Path.Combine(temppath, "arin.dat")),
                d.DownloadAsync("http://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest", Path.Combine(temppath, "lacnic.dat")),
                d.DownloadAsync("http://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest", Path.Combine(temppath, "afrinic.dat"))
                );

            // Initialize resolver with all data files
            var resolver = new IP2CountryResolver(
                Directory.GetFiles(temppath, "*.dat").Select(f => new RegistryCSVFileSource(f))
                );

            // A bunch of semi-"random" IPv4/IPv6 IP's from random countries for demonstration purposes...
            var ips = new[] {
                "172.217.17.110", "31.13.91.36",
                "2607:f8b0:4005:80b:0:0:0:200e", "2a03:2880:f11b:83:face:b00c:0:25de"
            };

            var results = resolver.Resolve(ips);

            // Now show the IP -> Country results
            for (int i = 0; i < ips.Length; i++)
            {
                Console.WriteLine($"IP: {ips[i],40}\tCountry: {results[i]?.Country ?? "Unknown"}");
            }
        }
Example #3
0
        public void ResolveOnEmptyDataSet_WorksCorrectly()
        {
            var target = new IP2CountryResolver(
                new MockDataSource <IPRangeCountry>(Array.Empty <IPRangeCountry>())
                );


            Assert.IsNull(target.Resolve("1.2.3.4"));
        }
Example #4
0
        public string GetUserHostRegion(string userHostAddress)
        {
            var resolver = new IP2CountryResolver(new IIP2CountryDataSource[] {
                new IpToAsnCSVFileSource(GetFullPath("App_Data/ip2country-v4.tsv.gz")),
                new IpToAsnCSVFileSource(GetFullPath("App_Data/ip2country-v6.tsv.gz")),
            });

            var resoult = resolver.Resolve(userHostAddress);

            return(resoult.Country);
        }
Example #5
0
        public void ResolveSingleRecord_WorksCorrectly()
        {
            var target = new IP2CountryResolver(
                new MockDataSource <IPRangeCountry>(new[]
            {
                new IPRangeCountry {
                    Country = "AA", Start = IPAddress.Parse("0.0.0.1"), End = IPAddress.Parse("0.0.0.1")
                },
            })
                );


            Assert.IsNull(target.Resolve("0.0.0.0"));
            Assert.AreEqual("AA", target.Resolve("0.0.0.1")?.Country);
            Assert.IsNull(target.Resolve("0.0.0.2"));
        }
        private void Reload(object state)
        {
            if (!_reloading)
            {
                _reloading = true;
                Trace.WriteLine("Reloading...");

                // Download latest files
                DownloadLatest(_config.CacheDirectory, _config.RefreshInterval.Add(TimeSpan.FromSeconds(-1)));

                // Make a new resolver
                var resolver = new IP2CountryResolver(
                    Directory.GetFiles(_config.CacheDirectory, "*.dat").Select(f => new RegistryCSVFileSource(f))
                    );

                // Swap out current resolver with new resolver
                _resolver = resolver;

                _reloading = false;
                Trace.WriteLine("Reload done...");
            }
        }