延迟从我的asp.net应用程序获取公共IP

时间:2016-01-15 17:13:51

标签: c# asp.net

我有一个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,但是需要3到5秒才能将公共IP提供给我的应用程序。根据此stackoverflow帖子Public IP Address,我将以下行添加到我的代码中,因为用户提到这将在获取公共IP的连续时间内更快

public static WebClient webclient = new WebClient();

然而,这也需要时间。我用Google搜索并使用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地址?

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

1 个答案:

答案 0 :(得分:1)

使用其他服务,例如ipify.org和json响应。它更快,无需解析。

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