2015-05-22 51 views
4

我有一個運行REST Web服務的應用引擎應用程序。 我想從我的Web服務處理的所有請求中提取IP地址。IP地址的應用引擎請求標頭

來自javax.servlet.http.HttpServletRequest我試圖提取IP地址檢查「X-Real-IP」,如果空或「未知」檢查列表中的第一個「X-Forwarded-對於「標題如果爲空或」未知「,請從request.getRemoteAddr()中獲取它。

我想我涵蓋了所有的情況,但我仍然得到像10.x.x.x,或127.0.0.1或未知的IP地址。

我知道應用程序引擎應用程序運行在負載平衡器後面,並且實例是動態的,我肯定省略了請求中的標題,因此我可以在日誌中看到原始IP地址(來自谷歌)。

編輯:我正在處理的所有請求都是直接請求服務(無隊列或cron請求)。

任何想法的其他頭檢查?

thx。

+0

內部請求(cron裏,隊列等),從'10.xxx' BTW –

+0

THX們來回答,但我說的是直接調用(沒有的cron或排隊呼叫)。 –

+1

您是否在使用雲端點?如果是這樣的話,請求不要擁有原始IP地址是有意義的。 – jirungaray

回答

1

回答this Question可能對您有幫助。有很多頭檢查:

private static final String[] HEADERS_TO_TRY = { 
    "X-Forwarded-For", 
    "Proxy-Client-IP", 
    "WL-Proxy-Client-IP", 
    "HTTP_X_FORWARDED_FOR", 
    "HTTP_X_FORWARDED", 
    "HTTP_X_CLUSTER_CLIENT_IP", 
    "HTTP_CLIENT_IP", 
    "HTTP_FORWARDED_FOR", 
    "HTTP_FORWARDED", 
    "HTTP_VIA", 
    "REMOTE_ADDR" }; 
+0

謝謝你的回答。我將在下一個應用程序版本中記錄所有這些包含和不包含'HTTP_'的頭文件,並檢查真實客戶機IP地址的存儲位置。除了可以添加鏈接的答案以檢查'ipAddress.startsWith(「192。」)|| ipAddress.startsWith(「192」)'以避免本地網絡IP地址。我很確定我的錯誤是我在'request.getRemoteAddr()'之前檢查'X-Real-IP'和'X-Real-IP'。如果我發現它與此相關,我會接受答案。 –