【问题标题】:Strange IP addresses in tomcat [duplicate]Tomcat中奇怪的IP地址[重复]
【发布时间】:2012-07-01 19:11:16
【问题描述】:

我在一些通用类中有这个。

public static String getRequestIp (HttpServletRequest request){
  String ipaddr = request.getHeader("X-FORWARDED-FOR");
  if (ipaddr == null)ipaddr = request.getRemoteAddr();
  return ipaddr;
}

对于每个请求,我都会调用该方法,并在某个时刻在 mysql 数据库中插入一条记录。

在大多数情况下,它可以正常工作,我可以在正确的字段中看到每个请求的记录,其中包含有效的 IP 地址。但有时IP应该在哪里是这样的。 “未知,93.186.30.120”或“10.0.1.169, 186.38.84.3” Apache 在前端侦听端口 80,并用作侦听端口 8081 的 Tomcat 的代理。 我的路由器配置不允许传递来自 80 以外的任何端口的任何连接。 有什么帮助吗? 提前致谢。

【问题讨论】:

  • 一个值得了解的细节:如果 IP 地址为“未知,93.186.30.120”,则用户代理为“BlackBerry8520/5.0.0.681 Profile/MIDP-2.1 Configuration/CLDC -1.1 VendorID/210"

标签: java apache tomcat networking servlets


【解决方案1】:

X-FORWARDED-FOR HTTP 标头的格式为:

X-Forwarded-For: client, proxy1, proxy2, ...

这样

unknown, 93.186.30.120 

表示来自 93.186.30.120 代理的请求,来自未知的本地地址;和

10.0.1.169, 186.38.84.3

同样的意思是,来自 186.38.84.3 代理的请求,来自本地 ip 10.0.1.169

【讨论】:

  • 非常感谢您的回答。最后,看起来需要一些额外的工作才能获得请求者的 IP 地址。我要做的就是用逗号分割字符串,并将第一个不是“未知”的值作为请求者的 ipaddress。
【解决方案2】:

“未知”X-Forwarded-For 条目可能已由配置为不将原始客户端 IP 地址插入该字段的代理插入。

例如,Squid 配置指令 forwarded_for 有各种选项,如果设置为“on”,将附加客户端 IP 地址。如果设置为“off”,它将显示为“X-Forwarded-For: unknown "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多