繁体   English   中英

如何确定HTTP和HTTPS请求中客户端的公共IP?

[英]How to determine public ip of client in HTTP and HTTPS request?

我已经阅读了各种博客,并做了一些实际的工作,但是在所有可能的情况下,都无法获得确定性的完整证据来确定获取客户端公共IP的方法。 服务器端的配置为: F5 <-> Apache Web服务器<-> Tomcat |

在代码中,我首先获取并解析请求标头X-FORWARDED-FOR以获取最左边的公共ip。 如果找不到,我将依赖request.getRemoteAddr()

所以问题是:

  1. 在某些情况下,此方法效果很好,但在协议为HTTPS时失败。 在这种情况下可以做什么?

  2. 如果X-Forwarded-For没有任何值,则我必须依赖request.getRemoteAddr() ,它始终为我的服务器提供IP。 这是因为位于之间的apache Web服务器,而getRemoteAddr返回发送请求的客户端或最后一个代理的地址。 如何克服这种情况?

  3. 除了X-forwarded-for外,我还应该读取其他任何标头吗?

  4. 还有哪些其他可能的情况应该处理?

String forwardedHeader  = servletRequest.getHeader("X-Forwarded-For");
clientIP =  servletRequest.getRemoteAddr();    

String forwarded = "";
if (forwardedHeader != null && !forwardedHeader.isEmpty())
{
    forwarded = forwardedHeader;

    int commaIdx = forwarded.indexOf(',');
    if (commaIdx > 0)
    {
        clientIP = forwarded.substring(0, commaIdx);
    }

    forwarded = forwarded.replace(',', '|');
}

if (forwarded != null && !forwarded.isEmpty())
{
    clientIP = forwarded;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM