我正在研究一個將用戶重定向到最近服務器的應用程序(有多個服務器)。爲此,我需要檢測客戶端訪問的客戶端的IP地址和服務器的IP地址。我想獲得我可以使用的客戶端IP地址:檢測客戶端和服務器的IP地址
HttpContext.Current.Request.UserHostAddress
如何獲取客戶端正在訪問的服務器的IP地址?是否有可能在不使用DNS查詢的情況下檢測到它?
我正在研究一個將用戶重定向到最近服務器的應用程序(有多個服務器)。爲此,我需要檢測客戶端訪問的客戶端的IP地址和服務器的IP地址。我想獲得我可以使用的客戶端IP地址:檢測客戶端和服務器的IP地址
HttpContext.Current.Request.UserHostAddress
如何獲取客戶端正在訪問的服務器的IP地址?是否有可能在不使用DNS查詢的情況下檢測到它?
看起來它是在這裏:
Getting the IP address of server in ASP.NET?
//this gets the ip address of the server pc
public string GetIPAddress()
{
string strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
return ipAddress.ToString();
}
榮譽給TStamper!
這個答案應該只是一個重複的評論。 – Silvermind 2012-03-21 08:17:37
它給了我這個錯誤'無法找到類型或名稱空間名'IPHostEntry'(你是否缺少using指令或程序集引用?)'。我錯過了什麼嗎? – skos 2012-03-21 08:19:15
更好地使用鏈接文章中的其他答案,[沒有DNS查詢](http://stackoverflow.com/a/2239564/107625)。 – 2012-03-21 08:19:49
更好,更清潔和更短的方法:
using System.Net;
public IPAddress[] GetIPAddress()
{
return Dns.GetHostAddresses(Dns.GetHostName());
}
TIP:此方法返回地址的陣列,其中一些是專用NIC和至少一個是公共的(面向因特網)。這是一種有用的方法,可以告訴您某個給定的IP地址是否是私有的。迭代您IPAddress[]
陣列和查詢反對這種方法:
public bool IsPrivateNetworkIPAddress(string ip)
{
Regex rx = new Regex(@"(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)"); // see http://stackoverflow.com/a/2814102/290343
return rx.IsMatch(ip);
}
這種重定向是在路由器層面正在做更好,因爲一旦客戶端連接重定向你不妨反正服務頁面。 – Lloyd 2012-03-21 08:42:57