我有一个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地址?
是否有任何代码比我目前使用的代码更快。
答案 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;
}
}
}