1

我是否能够依赖请求者的 IP 来处理所有 Web 请求?

我有一个 asp.net 应用程序,我想使用 IP 来识别未经身份验证的访问者。我真的不在乎 IP 是否是唯一的,只要那里有东西,这样我就不会得到空值。

如果不是,我想我将不得不处理值为空的情况。

还是有比 IP 更好的标识符?

4

6 回答 6

3

你可以从 Request.ServerVariables["REMOTE_ADDR"].

防守也无妨。如果您担心某些未设置的可怕错误情况,请检查该情况并进行相应处理。

这个值没有用可能有很多原因。您可能只能获得最后一跳的地址,例如本地网络上的负载平衡器或 SSL 解码器。它可能是 ISP 代理,或某些公司的 NAT 防火墙。

需要注意的是,一些代理可能会在额外的 HTTP 标头中提供它们转发流量的 IP,可通过 Request.ServerVariables["HTTP_X_FORWARDED_FOR"]. 您可能想先检查一下,然后再回到Request.ServerVariables["REMOTE_ADDR"]or Request.UserHostAddress

记录这些内容以供参考/审核当然不是一个坏主意。

于 2010-01-02T22:08:51.317 回答
2

我相信这个值是由您的网络服务器设置的,并且真的没有办法伪造它,因为如果他们将 IP 设置为其他东西,您对那里的请求的响应将无法回复他们。

您唯一应该担心的是代理。来自代理的每个人都将获得相同的 IP。

于 2010-01-02T21:58:34.770 回答
2

您将始终获得 IP 地址,除非您的 Web 服务器正在侦听某种不是 IP 网络的网络。但每个用户的 IP 地址不一定是唯一的。

于 2010-01-02T22:01:43.130 回答
1

嗯,web 请求是一个 http 连接,它是一个 tcp 连接,所有的 tcp 连接都有两个端点。所以,它一直存在。但这就是你所知道的。它既不是唯一的,也不是可靠准确的(包含所有代理和东西)。

于 2010-01-02T21:55:38.883 回答
1

是的,每个请求都必须有一个 IP 地址,但如上所述,一些 ISP 使用代理、NAT 或网关可能无法为您提供个人计算机。

您可以通过以下方式轻松获得此 IP(在 c# 中):

字符串 IP = Context.Request.ServerVariables["REMOTE_ADDR"].ToString();

或在 asp/vbscript 中

IP = request.servervariables("REMOTE_ADDR")

于 2010-01-02T22:03:48.613 回答
0

IP 地址对于识别用户没有多大用处。如前所述,公司代理和其他专用网络可以显示为单个 IP 地址。

您如何验证用户身份?通常,您会让他们登录,然后将该状态存储在您应用程序的会话中。

于 2010-01-02T22:01:31.757 回答