Beispiel #1
0
 public static void AddAnalysis(IPAnalysis analysis)
 {
     DiscoveredRanges.Add(analysis);
 }
Beispiel #2
0
        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);
        }