检测客户端和服务器的IP地址

5

我正在开发一个应用程序,可以自动将用户重定向到最近的服务器(有多个服务器)。为此,我需要检测客户端的IP地址和客户端访问的服务器的IP地址。我认为可以使用以下方法获取客户端的IP地址:

HttpContext.Current.Request.UserHostAddress

如何获取客户端正在访问的服务器IP地址?是否可以在不使用DNS查询的情况下进行检测?


这种重定向最好在路由器级别完成,因为一旦客户端连接以进行重定向,您可能也可以提供页面。 - Lloyd
2个回答

1

看起来在这里:

如何在ASP.NET中获取服务器IP地址?

//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
它给我这个错误 The type or namespace name 'IPHostEntry' could not be found (are you missing a using directive or an assembly reference?)。我有什么遗漏的吗? - skos
最好使用您链接文章中的另一个答案,即无需DNS查询的那个。 - Uwe Keim
@UweKeim 我找不到“无需DNS查询”的地方。它在哪里? - skos
1
只需点击@Uwe-Keim的评论“Without DNS querying” - 它将带您到不使用DNS查询的答案。 - RemarkLima

0
更好、更干净、更短的方法:
using System.Net;

public IPAddress[] GetIPAddress() 
{ 
    return Dns.GetHostAddresses(Dns.GetHostName());
} 

提示:此方法返回一个地址数组,其中一些是私有 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 https://dev59.com/9nE85IYBdhLWcg3wXCO1#2814102
    return rx.IsMatch(ip);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接