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()); } } }
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); } }