示例#1
0
        public static IPAddress ResolveNameIpAddress(string name)
        {
            if (IPAddress.TryParse(name.TrimEnd('.'), out _))
            {
                return(IPAddress.Parse(name.TrimEnd('.')));
            }
            while (true)
            {
                try
                {
                    DnsRecordBase ipMsg;
                    if (DnsSettings.StartupOverDoH)
                    {
                        ipMsg = QueryResolve.ResolveOverHttpsByDnsJson(IPAddress.Any.ToString(),
                                                                       name, "https://1.0.0.1/dns-query", DnsSettings.ProxyEnable, DnsSettings.WProxy).list[0];
                    }
                    else
                    {
                        ipMsg = new DnsClient(DnsSettings.SecondDnsIp, 5000).Resolve(DomainName.Parse(name))
                                .AnswerRecords[0];
                    }

                    switch (ipMsg.RecordType)
                    {
                    case RecordType.A when ipMsg is ARecord msg1:
                        return(msg1.Address);

                    case RecordType.CName:
                    {
                        if (ipMsg is CNameRecord msg)
                        {
                            name = msg.CanonicalName.ToString();
                        }
                        break;
                    }
                    }
                }
                catch (Exception e)
                {
                    try
                    {
                        var ipMsg = QueryResolve.ResolveOverHttpsByDnsJson(IPAddress.Any.ToString(),
                                                                           name, "https://1.0.0.1/dns-query", DnsSettings.ProxyEnable, DnsSettings.WProxy).list[0];
                        switch (ipMsg.RecordType)
                        {
                        case RecordType.A when ipMsg is ARecord msg1:
                            return(msg1.Address);

                        case RecordType.CName:
                        {
                            if (ipMsg is CNameRecord msg)
                            {
                                name = msg.CanonicalName.ToString();
                            }
                            break;
                        }
                        }
                    }
                    catch (Exception exception)
                    {
                        MyTools.BackgroundLog(exception.ToString());
                        return(IPAddress.Any);
                    }
                    MyTools.BackgroundLog(e.ToString());
                }
            }
        }
示例#2
0
        public static string GeoIpLocal(string ipStr, bool onlyCountryCode = false)
        {
            try
            {
                string locStr = new WebClient().DownloadString(IsIp(ipStr)
                    ? $"{UrlSettings.GeoIpApi}{ipStr}": $"{UrlSettings.GeoIpApi}{Dns.GetHostAddresses(ipStr)[0]}");
                JsonValue json = Json.Parse(locStr);

                string countryCode;
                string organization;

                if (locStr.Contains("\"country_code\""))
                {
                    countryCode = json.AsObjectGetString("country_code");
                }
                else if (locStr.Contains("\"countryCode\""))
                {
                    countryCode = json.AsObjectGetString("countryCode");
                }
                else
                {
                    countryCode = "";
                }

                if (locStr.Contains("\"organization\""))
                {
                    organization = json.AsObjectGetString("organization");
                }
                else if (locStr.Contains("\"as\""))
                {
                    organization = json.AsObjectGetString("as");
                }
                else if (locStr.Contains("\"org\""))
                {
                    organization = json.AsObjectGetString("org");
                }
                else
                {
                    organization = "";
                }

                if (!organization.ToUpper().Contains("AS") && locStr.Contains("\"asn\""))
                {
                    try
                    {
                        organization = $"AS{json.AsObjectGetInt("asn")} {organization}";
                    }
                    catch
                    {
                        organization = $"AS{json.AsObjectGetString("asn")} {organization}";
                    }
                }

                if (onlyCountryCode)
                {
                    return(countryCode);
                }
                return(countryCode + " " + organization);
            }
            catch (Exception e)
            {
                MyTools.BackgroundLog(@"| DownloadString failed : " + e);
                return(null);
            }
        }