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")); }
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")); }
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"}"); } }
public void ResolveOnEmptyDataSet_WorksCorrectly() { var target = new IP2CountryResolver( new MockDataSource <IPRangeCountry>(Array.Empty <IPRangeCountry>()) ); Assert.IsNull(target.Resolve("1.2.3.4")); }
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); }