我是否能够依赖请求者的 IP 来处理所有 Web 请求?
我有一个 asp.net 应用程序,我想使用 IP 来识别未经身份验证的访问者。我真的不在乎 IP 是否是唯一的,只要那里有东西,这样我就不会得到空值。
如果不是,我想我将不得不处理值为空的情况。
还是有比 IP 更好的标识符?
我是否能够依赖请求者的 IP 来处理所有 Web 请求?
我有一个 asp.net 应用程序,我想使用 IP 来识别未经身份验证的访问者。我真的不在乎 IP 是否是唯一的,只要那里有东西,这样我就不会得到空值。
如果不是,我想我将不得不处理值为空的情况。
还是有比 IP 更好的标识符?
你可以从 Request.ServerVariables["REMOTE_ADDR"]
.
防守也无妨。如果您担心某些未设置的可怕错误情况,请检查该情况并进行相应处理。
这个值没有用可能有很多原因。您可能只能获得最后一跳的地址,例如本地网络上的负载平衡器或 SSL 解码器。它可能是 ISP 代理,或某些公司的 NAT 防火墙。
需要注意的是,一些代理可能会在额外的 HTTP 标头中提供它们转发流量的 IP,可通过
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
. 您可能想先检查一下,然后再回到Request.ServerVariables["REMOTE_ADDR"]
or Request.UserHostAddress
。
记录这些内容以供参考/审核当然不是一个坏主意。
我相信这个值是由您的网络服务器设置的,并且真的没有办法伪造它,因为如果他们将 IP 设置为其他东西,您对那里的请求的响应将无法回复他们。
您唯一应该担心的是代理。来自代理的每个人都将获得相同的 IP。
您将始终获得 IP 地址,除非您的 Web 服务器正在侦听某种不是 IP 网络的网络。但每个用户的 IP 地址不一定是唯一的。
嗯,web 请求是一个 http 连接,它是一个 tcp 连接,所有的 tcp 连接都有两个端点。所以,它一直存在。但这就是你所知道的。它既不是唯一的,也不是可靠准确的(包含所有代理和东西)。
是的,每个请求都必须有一个 IP 地址,但如上所述,一些 ISP 使用代理、NAT 或网关可能无法为您提供个人计算机。
您可以通过以下方式轻松获得此 IP(在 c# 中):
字符串 IP = Context.Request.ServerVariables["REMOTE_ADDR"].ToString();
或在 asp/vbscript 中
IP = request.servervariables("REMOTE_ADDR")
IP 地址对于识别用户没有多大用处。如前所述,公司代理和其他专用网络可以显示为单个 IP 地址。
您如何验证用户身份?通常,您会让他们登录,然后将该状态存储在您应用程序的会话中。