示例#1
0
        public void WhoisClientIP5Test()
        {
            WhoisResponse response = WhoisClient.Query("31.116.94.96");

            Assert.AreEqual("EE Limited", response.OrganizationName);
            Assert.AreEqual("31.64.0.0-31.127.255.255", response.AddressRange.ToString());
        }
示例#2
0
        public void AddressRangeTest_EN1()
        {
            var r = new WhoisResponse(null, ResponseEN1);

            r.AddressRange.Begin.ToString().Is("192.41.192.0");
            r.AddressRange.End.ToString().Is("192.41.192.255");
        }
示例#3
0
        public void WhoisClientDomainTest()
        {
            WhoisResponse response = WhoisClient.Query("facebook.com");

            Assert.AreEqual("Facebook, Inc.", response.OrganizationName);
            Assert.IsNull(response.AddressRange);
        }
示例#4
0
        public void WhoisClientIP3Test()
        {
            WhoisResponse response = WhoisClient.Query("108.234.177.20");

            Assert.AreEqual("AT&T Internet Services", response.OrganizationName);
            Assert.AreEqual("108.192.0.0-108.255.255.255", response.AddressRange.ToString());
        }
示例#5
0
        public void WhoisClientIP4Test()
        {
            WhoisResponse response = WhoisClient.Query("190.190.132.64");

            Assert.AreEqual("Prima S.A.", response.OrganizationName);
            Assert.AreEqual("190.0.0.0-190.1.255.255", response.AddressRange.ToString());
        }
示例#6
0
        public void WhoisClientIPTest()
        {
            WhoisResponse response = WhoisClient.Query("4.4.4.4");

            Assert.AreEqual("Level 3 Communications, Inc. LVLT-STATIC-4-4-16 (NET-4-4-0-0-1)", response.OrganizationName);
            Assert.AreEqual("4.4.0.0-4.4.255.255", response.AddressRange.ToString());
        }
示例#7
0
        public void WhoisClientIP2Test()
        {
            WhoisResponse response = WhoisClient.Query("65.100.170.169");

            Assert.AreEqual("Qwest Communications Company, LLC QWEST-INET-115 (NET-65-100-0-0-1)", response.OrganizationName);
            Assert.AreEqual("65.100.0.0-65.103.255.255", response.AddressRange.ToString());
        }
示例#8
0
        /// <summary>
        /// Incoming packets are pushed here for handling.
        /// </summary>
        protected unsafe override void HandlePacket(IPacketBase packet)
        {
            base.HandlePacket(packet);

            //Update state from the client
            if (packet is PushState)
            {
                PushState state = (PushState)packet;
                //Push their state if it's the correct world ID
                if (state.WorldID == WorldID)
                {
                    LastState = state.State;
                }
            }

            //Move the user in to a new zone
            else if (packet is RequestZoneTransfer)
            {
                RequestZoneTransfer request = (RequestZoneTransfer)packet;

                m_world.ZoneManager.RequestZoneTransfer(this, request.ZoneID);
            }

            //Resolve names
            else if (packet is WhoisRequest)
            {
                WhoisRequest  request  = (WhoisRequest)packet;
                WhoisResponse response = PacketFactory.CreatePacket <WhoisResponse>();
                response.WorldID = request.WorldID;
                string name = m_world.GetNameForWorldID(request.WorldID);
                TextHelpers.StringToBuffer(name, response.Name, name.Length);
                DeferredSendPacket(response);
            }
        }
示例#9
0
        private IpInfo ParseResponse(WhoisResponse response, string ip)
        {
            _logger.LogInformation($"Trying parse response for ip {ip}");
            var lines  = response.Raw.Split('\n').Select(x => TrimAll(x));
            var result = new IpInfo
            {
                Ip      = ip,
                Company = response.OrganizationName
            };

            try
            {
                result.Subnet = response.AddressRange.ToCidrString();
            }
            catch
            {
                result.Subnet = response.AddressRange.ToString();
            }

            var countryLine = lines.FirstOrDefault(x => x.ToLower().Contains("country:"));

            if (countryLine != null)
            {
                var country = TrimAll(countryLine.Split(':')[1]);
                result.Country = country;
            }
            return(result);
        }
示例#10
0
        /// <summary>
        /// Search for domains and report progress
        /// </summary>
        /// <param name="domains">collection of domains</param>
        /// <param name="inputs">collection of input strings</param>
        /// <param name="progress">progress object</param>
        /// <returns>collection of whois sites informations</returns>
        public async Task <List <SiteInfo> > SearchAsync(IEnumerable <Domain> domains, IEnumerable <string> inputs, IProgress <ReportProgress> progress)
        {
            _Token      = new CancellationTokenSource();
            _ResetEvent = new AsyncManualResetEvent(true);
            List <SiteInfo> sites     = new List <SiteInfo>();
            var             addresses = inputs.SelectMany(input => domains.Where(dom => dom.IsChecked).Select(dom => input + dom.Name)).ToList();
            int             total     = addresses.Count;

            try
            {
                using (var whois = new WhoisLookup())
                {
                    for (int i = 0; i < addresses.Count; i++)
                    {
                        //cancellation
                        _Token.Token.ThrowIfCancellationRequested();
                        //pause
                        await _ResetEvent.WaitAsync();

                        SiteInfo site;
                        var      adr = addresses[i];
                        try
                        {
                            WhoisResponse response = await whois.LookupAsync(adr);

                            site = new SiteInfo(adr, response);
                            sites.Add(site);
                        }
                        catch (Whois.WhoisException)
                        {
                            site = SiteInfo.Error(adr);
                            sites.Add(site);
                        }
                        catch (System.TimeoutException)
                        {
                            site = SiteInfo.Error(adr);
                            sites.Add(site);
                        }
                        catch (Exception)
                        {
                            throw;
                        }

                        int done = (int)((i + 1.0) / total * 100.0);
                        progress.Report(new ReportProgress(done, $"Done {i + 1} of {total}", site));
                    }
                }
                return(sites);
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#11
0
        public void TestGetServerWhenCached()
        {
            var existing = new WhoisResponse {
                DomainName = new HostName("com")
            };

            cache.Set(existing);

            var server = cache.Get("com");

            Assert.AreEqual(existing, server);
        }
示例#12
0
        static void FetchDate()
        {
            Whois.Parsers.WhoisParser whoisParser = new Whois.Parsers.WhoisParser();
            foreach (var p in db.DomainDetails.Where(x => x.HasDate == null && x.IsPing == true))
            {
                Console.WriteLine($"Fetch Date => {p.Name}");
                WhoisResponse d  = WhoisClient.Query(p.Name);
                var           d2 = whoisParser.Parse(d.RespondedServers[d.RespondedServers.Length - 1], d.Raw);

                if (d2.Registered != null && d2.Updated != null && d2.Expiration != null)
                {
                    p.HasDate    = true;
                    p.RegisterAt = d2.Registered;
                    p.UpdateAt   = d2.Updated;
                    p.ExpiryAt   = d2.Expiration;

                    RecCount++;
                }
                else
                {
                    long n = EMailExtract.NetConnectionCheckAndWait();
                    if (n == 1)
                    {
                        p.HasDate = false;
                        RecCount++;
                    }
                    else
                    {
                        d  = WhoisClient.Query(p.Name);
                        d2 = whoisParser.Parse(d.RespondedServers[d.RespondedServers.Length - 1], d.Raw);

                        if (d2.Registered != null && d2.Updated != null && d2.Expiration != null)
                        {
                            p.HasDate    = true;
                            p.RegisterAt = d2.Registered;
                            p.UpdateAt   = d2.Updated;
                            p.ExpiryAt   = d2.Expiration;
                            RecCount++;
                        }
                        else
                        {
                            p.HasDate = false;
                            RecCount++;
                        }
                    }
                }
                if (EMailExtract.escPressed)
                {
                    return;
                }
            }
        }
 /// <summary>
 /// Wrpper class for WhoisResponse.
 /// </summary>
 public WhoisResponseWrapper(WhoisResponse response)
 {
     if (response != null)
     {
         OrganizationName = response.OrganizationName;
         RespondedServers = response.RespondedServers;
         Raw = response.Raw;
     }
     else
     {
         RespondedServers = new string[0];
     }
     AddressRange = response?.AddressRange;
 }
示例#14
0
        public void JsonSerializationByJSONNETTest()
        {
            var response = new WhoisResponse(
                new[] { "whois.iana.org", "whois.apnic.net", "whois.afrinic.net" },
                "NetRange: 150.126.0.0 - 150.126.255.255\n" +
                "OrgName:  Santa Cruz Operation Incorporated");
            var json = JsonConvert.SerializeObject(response);

            json.Is("{" +
                    @"""RespondedServers"":[""whois.iana.org"",""whois.apnic.net"",""whois.afrinic.net""]," +
                    @"""Raw"":""NetRange: 150.126.0.0 - 150.126.255.255\nOrgName:  Santa Cruz Operation Incorporated""," +
                    @"""OrganizationName"":""Santa Cruz Operation Incorporated""," +
                    @"""AddressRange"":{""Begin"":""150.126.0.0"",""End"":""150.126.255.255""}" +
                    "}");
        }
示例#15
0
        public async Task TestRedirectedWhoisData()
        {
            TcpReaderFactory.Bind(() => new FakeTcpReader("Redirected WHOIS Data"));

            var record = new WhoisResponse(File.ReadAllText(@"..\..\..\Samples\Redirects\MarkMonitor.txt"));
            var state  = new LookupState
            {
                Response = record,
                Options  = WhoisOptions.Defaults,
                Domain   = "example.com"
            };

            var result = await visitor.Visit(state);

            Assert.AreEqual("Redirected WHOIS Data", result.Response.Content);
        }
示例#16
0
        public void TestCacheUpdate()
        {
            var first = new WhoisResponse {
                DomainName = new HostName("com")
            };

            cache.Set(first);
            var second = new WhoisResponse {
                DomainName = new HostName("com")
            };

            cache.Set(second);

            var server = cache.Get("com");

            Assert.AreEqual(second, server);
        }
示例#17
0
        public IpInfo GetInfo(string ip)
        {
            //if (IsPrivate(ip))
            //	return null;
            WhoisResponse response = null;

            try
            {
                var query = WhoisClient.Query(ip);
                response = query;
                return(ParseResponse(query, ip));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Parsing failed for ip {ip}");
                try
                {
                    if (response != null && response.OrganizationName != null)
                    {
                        var org       = response.OrganizationName;
                        var orgPassed = org;
                        if (org.Contains("(") && org.Contains(")"))
                        {
                            var openBracket  = org.LastIndexOf('(');
                            var closeBracket = org.LastIndexOf(')');
                            orgPassed = org.Substring(openBracket + 1, closeBracket - openBracket - 1);
                        }

                        var q1 = WhoisClient.Query(orgPassed, response.RespondedServers.Last());
                        response = q1;
                        return(ParseResponse(q1, ip));
                    }
                }
                catch (Exception iex)
                {
                    _logger.LogWarning(iex, $"Ошибка при получении информации об IP: {ip}");
                }
            }
            return(null);
        }
示例#18
0
        static void Main(string[] args)
        {
            //Init locals
            WhoisResponse response = null;
            WhoisLookup   whois    = null;

            //Setup
            SetupDomainList();

            foreach (var d in _domains)
            {
                if (DomainIsValid(d))
                {
                    try
                    {
                        whois    = new WhoisLookup();
                        response = whois.Lookup(d);
                        AnalyzeData(response?.ParsedResponse);

                        Console.WriteLine("\n\n*******************************************************");
                        Console.WriteLine($"************************Results for {d}: ");
                        Console.WriteLine(ScrubContent(response?.Content));
                        Console.WriteLine("\n*******************************************************\n");
                    } // end try
                    catch (Exception)
                    {
                        Console.WriteLine($"Lookup of domain: {d} failed!");
                        Thread.Sleep(1000);
                    } // end catch
                }
            }         // end foreach

            PrintReport();

            //Wait for input to exit
            Console.Write("Press enter to exit...");
            Console.ReadKey();
        } // end method Main
示例#19
0
        /// <summary>
        /// Whois lookup
        /// </summary>
        /// <param name="sld">second level domain</param>
        /// <returns></returns>
        public Domains.Whois.Whois Lookup(string sld)
        {
            try
            {
                WhoisResponse whoisResult = null;
                whoisResult = this._whoisService.Lookup(sld)
                              .GetAwaiter()
                              .GetResult();

                if (whoisResult.ParsedResponse == null)
                {
                    throw new Exception("Can not resolve host");
                }

                var options = new JsonSerializerOptions
                {
                    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
                    PropertyNameCaseInsensitive = true
                };
                var json = JsonSerializer.Serialize(whoisResult.ParsedResponse, options);
                var w    = JsonSerializer.Deserialize <Domains.Whois.Whois>(json, options);
                w.Status    = "success";
                w.CheckedAt = DateTimeOffset.Now.ToUnixTimeSeconds();
                return(w);
            }
            catch (Exception ex)
            {
                // TODO: logging
                Console.WriteLine(ex.Message);
                return(new Domains.Whois.Whois
                {
                    DomainName = sld,
                    Status = "error",
                    CheckedAt = DateTimeOffset.Now.ToUnixTimeSeconds()
                });
            }
        }
示例#20
0
        /// <summary>
        /// Determines whether a WHOIS response is a redirect response to another WHOIS server.
        /// </summary>
        public bool IsARedirectRecord(WhoisResponse response, out WhoisRedirect redirect)
        {
            redirect = null;

            var pattern = Embedded.Patterns.Redirects.VerisignGrs;

            var tokenizer = new TokenMatcher();

            tokenizer.AddPattern(pattern, "verisign-grs.com");

            if (tokenizer.TryMatch <WhoisRedirect>(response.Content, out var match))
            {
                Log.Debug("Found redirect for {0} to {1}", response.Domain, match.Result.Url);

                redirect = match.Result;

                if (string.IsNullOrEmpty(redirect.Url) == false)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#21
0
        /// <summary>
        /// The query to send to the server chain. Likely wont work reliably with flags.
        /// </summary>
        /// <param name="QueryString">The Host or IP to query for</param>
        /// <returns>A collection of data from the server chain</returns>
        public QueryResponse Query(string QueryString)
        {
            QueryResponse queryResponse = new QueryResponse();

            string whoisServer = "whois.arin.net";

            string response = string.Empty;

            bool requery = false;

            do
            {
                if (!discoveredServers.Contains(whoisServer))
                {
                    discoveredServers.Add(whoisServer);
                }

                requery = false;

                TelnetClient client;

                try
                {
                    if (whoisServer.Contains(":"))
                    {
                        client = new TelnetClient(whoisServer.To(":"), int.Parse(whoisServer.From(":")));
                    }
                    else
                    {
                        client = new TelnetClient(whoisServer, 43);
                    }

                    response = client.Send(QueryString);
                }
                catch (Exception ex)
                {
                    this.Error?.Invoke(ex);
                    return(queryResponse);
                }

                queryResponse.ServerResponses.Add(new ServerResponse()
                {
                    Response = response,
                    Server   = whoisServer,
                    Request  = QueryString
                });

                if (response.Contains(REFERRAL_SERVER))
                {
                    requery = true;

                    whoisServer = response.Split('\n').First(s => s.Contains(REFERRAL_SERVER)).From(": ");

                    if (whoisServer.Contains("://"))
                    {
                        whoisServer = whoisServer.From("://");
                    }
                }
            } while (requery);

            WhoisResponse whoisResponse = new WhoisResponse();

            foreach (string s in response.Split('\n'))
            {
                string toParse = s;

                if (toParse.StartsWith("#") || toParse.StartsWith("%") || string.IsNullOrWhiteSpace(toParse))
                {
                    continue;
                }

                Match m = Regex.Match(s, @"(.+)\s(.+)\s(\(.+\))\s([0-9\.]*)\s+-\s+([0-9\.]*)");

                if (m.Success)
                {
                    WhoisResponse thisResponse = new WhoisResponse();

                    thisResponse.OrgName = m.Groups[1].Value;
                    thisResponse.NetName = m.Groups[2].Value;
                    thisResponse.IPFrom  = m.Groups[4].Value;
                    thisResponse.IPTo    = m.Groups[5].Value;

                    queryResponse.WhoisResponses.Add(thisResponse);
                    continue;
                }

                if (!toParse.Contains(":"))
                {
                    continue;
                }

                if (toParse.StartsWith("network:"))
                {
                    toParse = toParse.From(":");
                }

                string key   = toParse.To(":").Trim().ToLower();
                string Value = toParse.From(":").Trim();

                //wayport

                switch (key)
                {
                case "inetnum":
                case "netrange":
                case "ip-network-block":
                case "cidr":
                case "ip-network":
                    if (Value.Contains("-"))
                    {
                        whoisResponse.IPFrom = Value.To("-").Trim();
                        whoisResponse.IPTo   = Value.From("-").Trim();
                    }
                    else if (Value.Contains("/"))
                    {
                        whoisResponse.CIDR = string.IsNullOrWhiteSpace(whoisResponse.Country) ? Value : $"{Value}, {whoisResponse.CIDR}";
                    }
                    else
                    {
                        throw new Exception("Invalid network");
                    }

                    break;

                case "netname":
                case "network-name":
                    whoisResponse.NetName = Value;
                    break;

                case "country":
                case "country-code":
                    whoisResponse.Country = string.IsNullOrWhiteSpace(whoisResponse.Country) ? Value : whoisResponse.Country;
                    break;

                case "org-name":
                case "orgname":
                case "organization;i":
                    whoisResponse.OrgName = Value;
                    break;
                }
            }

            //Make sure we have something to return
            if (!string.IsNullOrWhiteSpace(whoisResponse.CIDR) || !string.IsNullOrWhiteSpace(whoisResponse.IPFrom))
            {
                queryResponse.WhoisResponses.Add(whoisResponse);
            }

            return(queryResponse);
        }
示例#22
0
 public void Set(WhoisResponse server)
 {
     cache.AddOrUpdate(server.DomainName.ToUnicodeString(), server, (tld, existing) => server);
 }
示例#23
0
        protected override bool TryGetRegistrant(IList <Match> matches, WhoisResponse response, out Contact contact)
        {
            contact = null;

            var contactIdMatch = matches
                                 .FirstOrDefault(m => m.Token.Name == "Address");

            if (contactIdMatch == null)
            {
                return(false);
            }

            var paragraph = contactIdMatch.Location.Paragraph;

            contact = new Contact();
            var count = 0;

            foreach (var match in matches)
            {
                if (match.Location.Paragraph != paragraph)
                {
                    continue;
                }

                switch (match.Token.Name)
                {
                case "Address":
                    var matchValueString = match.Value.ToString();
                    if (string.IsNullOrEmpty(contact.Name))
                    {
                        contact.Name = matchValueString;
                    }
                    else
                    {
                        contact.Address.Add(matchValueString);
                    }
                    count++;
                    break;

                case "Phone":
                    contact.TelephoneNumber = match.Value.ToString();
                    break;

                case "Fax":
                    contact.FaxNumber = match.Value.ToString();
                    break;

                case "Email":
                    contact.Email = match.Value.ToString();
                    break;

                case "Changed":
                    var dateTime = (DateTime)match.Value;
                    if (dateTime > response.Updated || !response.Updated.HasValue)
                    {
                        response.Updated = dateTime;
                    }
                    if (dateTime < response.Registered || !response.Registered.HasValue)
                    {
                        response.Registered = dateTime;
                    }
                    break;
                }
            }

            return(count > 0);
        }
示例#24
0
        public static string GetWhois(this string IpOrHostname)
        {
            WhoisResponse res = WhoisClient.Query(IpOrHostname);

            return(res.OrganizationName + Environment.NewLine + res.AddressRange.ToString());
        }
        public void RespondedServersTest()
        {
            WhoisResponse WR = WhoisClient.Query("150.126.0.0");

            Assert.AreEqual(3, WR.RespondedServers.Length);
        }