gpt4 book ai didi

c# - 如何在 ASP.NET 中获取用户的客户端 IP 地址?

转载 作者:IT王子 更新时间:2023-10-29 03:27:51 24 4
gpt4 key购买 nike

我们有 Request.UserHostAddress 来获取 ASP.NET 中的 IP 地址,但这通常是用户的 ISP 的 IP 地址,而不是例如单击链接的用户的机器 IP 地址。如何获取真实 IP 地址?

例如,在 Stack Overflow 用户配置文件中是:“上次帐户事件:4 小时前来自 86.123.127.8”,但我的机器 IP 地址有点不同。 Stack Overflow 是如何得到这个地址的?

在某些网络系统中,出于某些目的会检查 IP 地址。例如,对于某个 IP 地址,每 24 小时用户只能点击下载链接 5 次?此 IP 地址应该是唯一的,而不是针对拥有大量客户或互联网用户的 ISP。

我理解的好吗?

最佳答案

您通常会想知道访问您网站的人的 IP 地址。虽然 ASP.NET 有多种方法可以做到这一点,但我们看到的最佳方法之一是使用 ServerVariables 集合的“HTTP_X_FORWARDED_FOR”。

这就是为什么......

有时您的访问者位于代理服务器或路由器后面,而标准 Request.UserHostAddress 仅捕获代理服务器或路由器的 IP 地址。在这种情况下,用户的 IP 地址将存储在服务器变量(“HTTP_X_FORWARDED_FOR”)中。

所以我们要做的是首先检查“HTTP_X_FORWARDED_FOR”,如果它是空的,我们然后简单地返回 ServerVariables("REMOTE_ADDR")

虽然这种方法并非万无一失,但它可以带来更好的结果。下面是 VB.NET 中的 ASP.NET 代码,摘自 James Crowley's blog post "Gotcha: HTTP_X_FORWARDED_FOR returns multiple IP addresses"

C#

protected string GetIPAddress()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (!string.IsNullOrEmpty(ipAddress))
{
string[] addresses = ipAddress.Split(',');
if (addresses.Length != 0)
{
return addresses[0];
}
}

return context.Request.ServerVariables["REMOTE_ADDR"];
}

VB.NET

Public Shared Function GetIPAddress() As String
Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
Dim sIPAddress As String = context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If String.IsNullOrEmpty(sIPAddress) Then
Return context.Request.ServerVariables("REMOTE_ADDR")
Else
Dim ipArray As String() = sIPAddress.Split(New [Char]() {","c})
Return ipArray(0)
End If
End Function

关于c# - 如何在 ASP.NET 中获取用户的客户端 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com