延迟从我的 asp.net 应用程序获取公共 IP
本文关键字:获取 IP 应用程序 net 我的 asp 延迟 | 更新日期: 2023-09-27 18:30:37
我有一个 asp.net 网站,我在其中使用以下代码获取外部IP。
public static string GetExternalIp()
{
try
{
string externalIP = "";
externalIP = (webclient.DownloadString("http://checkip.dyndns.org/"));
externalIP = (new Regex(@"'d{1,3}'.'d{1,3}'.'d{1,3}'.'d{1,3}")).Matches(externalIP)[0].ToString();
return externalIP;
}
catch {
//return null;
return Dns.GetHostByName(Environment.MachineName).AddressList[0].ToString();
}
}
代码正在完美地获取外部 IP,但是,将公共 IP 获取到我的应用程序需要 3 到 5 秒。基于这个堆栈溢出帖子公共 IP 地址,我将以下行添加到我的代码中,因为用户提到这将连续更快地获取公共 IP
public static WebClient webclient = new WebClient();
然而,这也需要时间。我用谷歌搜索并使用HTTPWebRequest找到了另一个代码。下面是代码
string myExternalIP;
string strHostName = System.Net.Dns.GetHostName();
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
string clientip = clientIPAddress.ToString();
System.Net.HttpWebRequest request =
(System.Net.HttpWebRequest) System.Net.HttpWebRequest.Create("http://www.whatismyip.org");
request.UserAgent = "User-Agent: Mozilla/4.0 (compatible; MSIE" +
"6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
System.Net.HttpWebResponse response =
(System.Net.HttpWebResponse) request.GetResponse();
using(System.IO.StreamReader reader = new StreamReader(response.GetResponseStream())) {
myExternalIP = reader.ReadToEnd();
reader.Close();
}
此代码速度很快,但它会创建一个包含公共 IP 的 html 文档。
如何仅从该HTML文档中获取IP地址?
是否有任何代码会比我当前使用的代码更快。
使用其他服务,例如使用 json 响应的 ipify.org。它更快,不需要解析。
using Newtonsoft.Json;
using System.Net;
namespace Stackoverflow
{
public static class GetExternalIP
{
class IpAddress
{
public string ip { get; set; }
}
public static string GetExternalIp()
{
WebClient client = new WebClient();
string jsonData = client.DownloadString("https://api.ipify.org/?format=json");
IpAddress results = JsonConvert.DeserializeObject<IpAddress>(jsonData);
string externalIp = results.ip;
return externalIp;
}
}
}