代码之家  ›  专栏  ›  技术社区  ›  dtc

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

  •  1
  • dtc  · 技术社区  · 14 年前

    我是否能够依赖请求者的IP通过所有Web请求?

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

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

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

    6 回复  |  直到 14 年前
        1
  •  3
  •   user242275    14 年前

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

    防御性并不伤人。如果你担心一些可怕的错误情况,如果没有设置,检查一下这个情况,并相应地处理它。

    这个值可能有很多原因不有用。您只能获取最后一个跃点的地址,如本地网络上的负载均衡器或SSL解码器。它可能是一个ISP代理,或者某个公司的NAT防火墙。

    在这一点上,一些代理可以在一个额外的HTTP头中为其提供转发流量的IP,可以通过 Request.ServerVariables["HTTP_X_FORWARDED_FOR"] .你可能想先检查一下这个,然后再回到 request.servervariables[“远程地址”] Request.UserHostAddress .

    把这些记录下来作为参考/审计当然不是一个坏主意。

        2
  •  2
  •   William Clemens    14 年前

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

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

        3
  •  2
  •   Jeff    14 年前

    除非你的网络服务器监听的是某种不是IP网络的网络,否则你总是会得到一个IP地址。但每个用户的IP地址不一定是唯一的。

        4
  •  1
  •   Michael Krelin - hacker    14 年前

    Web请求是一个HTTP连接,它是一个TCP连接,所有TCP连接都有两个端点。所以,它总是存在的。但这和你所知道的差不多。它既不独特,也不可靠准确(包括所有代理和东西)。

        5
  •  1
  •   nixkuroi    14 年前

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

    您可以通过以下方式轻松获得此IP(C):

    string ip=context.request.servervariables[“remote_addr”].toString();

    或在ASP/VBScript中

    ip=request.servervariables(“远程地址”)

        6
  •  0
  •   Paolo    14 年前

    IP地址不太适合用来识别用户。如前所述,公司代理和其他专用网络可以显示为单个IP地址。

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