2012-03-21 133 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); 
}