簡體   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