所有Web请求都包含请求者的IP吗?

时间:2010-01-02 21:45:40

标签: asp.net ip-address webrequest

我是否可以依赖请求者的IP来处理所有网络请求?

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

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

或者是否有比IP更好的标识符?

6 个答案:

答案 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地址。

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