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