2012-03-21 146 views
5

我正在研究一個將用戶重定向到最近服務器的應用程序(有多個服務器)。爲此,我需要檢測客戶端訪問的客戶端的IP地址和服務器的IP地址。我想獲得我可以使用的客戶端IP地址:檢測客戶端和服務器的IP地址

HttpContext.Current.Request.UserHostAddress 

如何獲取客戶端正在訪問的服務器的IP地址?是否有可能在不使用DNS查詢的情況下檢測到它?

+0

這種重定向是在路由器層面正在做更好,因爲一旦客戶端連接重定向你不妨反正服務頁面。 – Lloyd 2012-03-21 08:42:57

回答

1

看起來它是在這裏:

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!

+1

這個答案應該只是一個重複的評論。 – Silvermind 2012-03-21 08:17:37

+0

它給了我這個錯誤'無法找到類型或名稱空間名'IPHostEntry'(你是否缺少using指令或程序集引用?)'。我錯過了什麼嗎? – skos 2012-03-21 08:19:15

+0

更好地使用鏈接文章中的其他答案,[沒有DNS查詢](http://stackoverflow.com/a/2239564/107625)。 – 2012-03-21 08:19:49

0

更好,更清潔和更短的方法:

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); 
} 
相關問題