public static void AddAnalysis(IPAnalysis analysis) { DiscoveredRanges.Add(analysis); }
public static IPAnalysis QueryIP(IPAddress Ip) { IPAnalysis?analysis = null; lock (QueryLock) { TryLoadAnalysis(); foreach (IPAnalysis discoveredAnalysis in DiscoveredRanges) { if (discoveredAnalysis.IsMatch(Ip)) { analysis = discoveredAnalysis; break; } } if (analysis is null) { IPAnalysis nanalysis = new IPAnalysis() { DiscoveryDate = DateTime.Now }; if (LastQuery != DateTime.MinValue && (DateTime.Now - LastQuery).TotalMilliseconds < QueryTimeout) { System.Threading.Thread.Sleep((int)(QueryTimeout - (DateTime.Now - LastQuery).TotalMilliseconds)); } string Response = ProcessHelper.Run(Path.Combine(Directory.GetCurrentDirectory(), "Whois", "whosip.exe"), Ip.ToString()).ToString(); string[] lines = Response.Split('\r').Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => s.Trim()).ToArray(); foreach (string line in lines) { string key = line.To(":").ToLower().Trim(); string value = line.From(":").Trim(); switch (key) { case "whois source": nanalysis.WhoisSource = value; break; case "ip address": nanalysis.IpAddress = value; break; case "country": nanalysis.Country = value; break; case "network name": nanalysis.NetworkName = value; break; case "owner name": nanalysis.OwnerName = value; break; case "cidr": nanalysis.CIDR = value.Split(",").Select(s => s.Trim()).Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); break; case "from ip": nanalysis.FromIp = value; break; case "to ip": nanalysis.ToIp = value; break; case "allocated": nanalysis.Allocated = value == "Yes"; break; case "contact name": nanalysis.ContactName = value; break; case "address": nanalysis.Address = value; break; case "email": nanalysis.Email = value; break; case "abuse email": nanalysis.AbuseEmail = value; break; case "phone": nanalysis.Phone = value; break; case "fax": nanalysis.Fax = value; break; } } analysis = nanalysis; LastQuery = DateTime.Now; AddAnalysis(analysis.Value); SaveAnalysis(); } } return(analysis.Value); }