【问题标题】:Strange client IP adress from"REMOTE_ADDR" in WebService (ASP.NET)来自 Web 服务 (ASP.NET) 中“REMOTE_ADDR”的奇怪客户端 IP 地址
【发布时间】:2012-01-30 07:04:00
【问题描述】:

我为我的一个项目运行服务器。客户端在启动时调用作为 Web 服务运行的更新检查功能。这些请求被记录到文件中。

我使用以下函数记录到文件:

Public Sub Log(ByVal Message As String, ByVal Level As LogEntryLevel, ByVal Additional As Boolean)
   Dim base As String = "C:\SERVER\log\"
   Dim fileName As String = Date.Now.ToString("dd-MM-yyyy") & ".log"
   Dim newString As String = ""
   If Not Additional Then
      If System.IO.File.Exists(base + fileName) Then newString &= vbNewLine
      newString &= Date.Now.ToString("[dd/MM/yyyy HH:mm:ss.fff ") & Level.ToString & "] " & Message
   Else
      newString &= Message
   End If
   My.Computer.FileSystem.WriteAllText(base + fileName, newString, True)
End Sub

我使用以下函数来获取客户端 IP 地址:

Public Function getIP() As String
   Dim ip As String
   ip = Context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
   If ip = String.Empty Then
      ip = Context.Request.ServerVariables("REMOTE_ADDR")
   End If
   Return ip
End Function

日志消息构造如下:

Log(String.Format("Client {0} invoked CheckForUpdate with [{1}]", getIP, ver), LogEntryLevel.INFO, False)

前段时间这被记录了:

[11-12-2011 22:10:20.730 INFO] Client 10.0.1.4, 127.0.0.1 invoked CheckForUpdate with [0.5]

O_O 这个怎么退?这是正常的吗?这可能吗?请求如何来自 localhost (127.0.0.1) 并同时来自远程 IP 地址?服务器被黑了吗?这是一个故障吗?有人可以向我解释一下吗?

【问题讨论】:

    标签: asp.net vb.net web-services ip-address


    【解决方案1】:

    这很可能是因为使用了非匿名代理来访问您的服务器。高匿名代理完全隐藏了正在使用代理的事实,标准匿名代理不显示用户的原始 IP 地址,但它们确实发送 X-Forwarded-For 标头,因此可以通过这种方式检测到它们。但是,非匿名代理只需将 X-Forwarded-For 标头值添加到用户的 IP 地址,它往往看起来与您在日志中找到的结果完全相同。它被转发到 127.0.0.1 的事实意味着他们可能正在尝试某种形式的恶意活动,可能会提交带有修改值的重新创建的表单。

    【讨论】:

    • 这是否意味着客户试图做他不应该做的事情?我有能力拒绝来自与指定正则表达式匹配的某个 IP 地址的进一步请求。我是否应该阻止具有此 IP 地址的客户端调用此方法(从而使用该应用程序)?
    • 好吧,如果 CheckForUpdate 不能用于任何危险的事情,他们可能只是为了方便而尝试以编程方式运行它。理想情况下,您会保留每个 GET 和 POST 请求的更详细日志,以便您可以准确地查看他们提交的数据,以确定它是否会损害您的应用程序的完整性。经过一番研究,看起来 10.0.1.4 可能只是用户的 DHCP 设置的结果;它可能是完全无害的,但也可能是一种保持匿名的尝试。
    • 我查看了当天的 ISS 日志文件,在我自己的日志文件的时间戳上,ISS 日志文件中没有任何内容。大约 30 秒后有一个,但 IP 不同。
    【解决方案2】:

    我相信这个问题会对你有所帮助:How do I get the correct IP from HTTP_X_FORWARDED_FOR if it contains multiple IP Addresses?

    似乎HTTP_X_FORWARDED_FOR可以返回多个逗号分隔的IP,形式如下: X-Forwarded-For: client1, proxy1, proxy2, ...

    所以 10.0.1.4 是与 localhost 在同一网络上的计算机,它使用 localhost 作为代理。有些局域网就是这样设置的,通过某台电脑连接。

    192.168.x.x 和 10.x.x.x 是本地网络的保留 IP 地址范围

    我相信在您服务器的局域网上调用了客户端。

    【讨论】:

    • 如果我从自己的网络调用该函数,则会记录:“[30-12-2011 02:51:38.781 INFO] Client 192.168.1.1 invoked CheckForUpdate with [0.5]”我局域网上的所有计算机(我测试过)。而且由于我的局域网上没有人使用它(我检查过),因此请求不可能来自我的局域网。还有哪些可能?
    • 如果您的路由器设置为使用 192.168.x.x 而不是 10.x.x.x,那么 HTTP_X_FORWARDED_FOR 标头可能被欺骗了。您可以修改代码以捕获任何 10.xxx 客户端,因为它们不应该存在,并忽略它们,并且可能使用 REMOTE_ADDR 来创建黑名单,因为您可能不希望任何人试图假装他们在您的 Intranet 上,当他们不是。请注意:REMOTE_ADDR 也可以被欺骗,但是响应内容将被发送到 REMOTE_ADDR,因此欺骗 REMOTE_ADDR 是没有意义的,因为不会收到响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多