延迟从我的 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地址?

是否有任何代码会比我当前使用的代码更快。

延迟从我的 asp.net 应用程序获取公共 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;
        }
    }
}