检测客户端和服务器的IP地址
我正在研究一个将用户重定向到最近服务器的应用程序(有多个服务器)。为此,我需要检测客户端访问的客户端的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://*.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://*.com/a/2814102/290343
return rx.IsMatch(ip);
}
这种重定向是在路由器层面正在做更好,因为一旦客户端连接重定向你不妨反正服务页面。 – Lloyd 2012-03-21 08:42:57