獲取當前訪問客戶端的真實IP地址,辨別是否為內網?
Test.jsp 測試頁面
TestAddress tsetadres = new TestAddress();
String addIP = request.getRemoteAddr();
if(!addIP.equals(""))
{
String relIp = tsetadres.getIpAddr(request);
boolean isTrue = tsetadres.isInnerIP(relIp);
if(isTrue == true)
{
//內網
......
}
else
{
//外網
........
}
}
TestAddress.java 測試類
public class TestAddres {
//獲取客戶端真實的IP
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
//判斷客戶端IP地址是否為內網地址
public boolean isInnerIP(String ipAddress){
boolean isInnerIp = false;
long ipNum = getIpNum(ipAddress);
/**
私有IP:
A類 10.0.0.0-10.255.255.255
B類 172.16.0.0-172.31.255.255
C類 192.168.0.0-192.168.255.255
**/
long aBegin = getIpNum("10.0.0.0");
long aEnd = getIpNum("10.255.255.255");
long bBegin = getIpNum("172.16.0.0");
long bEnd = getIpNum("172.31.255.255");
long cBegin = getIpNum("192.168.0.0");
long cEnd = getIpNum("192.168.255.255");
isInnerIp = isInner(ipNum,aBegin,aEnd) || isInner(ipNum,bBegin,bEnd) || isInner(ipNum,cBegin,cEnd) || ipAddress.equals("127.0.0.1"); //訪問本地localhost獲取為127.0.0.1
return isInnerIp;
}
private static long getIpNum(String ipAddress) {
String [] ip = ipAddress.split("//.");
long a = Integer.parseInt(ip[0]);
long b = Integer.parseInt(ip[1]);
long c = Integer.parseInt(ip[2]);
long d = Integer.parseInt(ip[3]);
long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
return ipNum;
}
private static boolean isInner(long userIp,long begin,long end){
return (userIp>=begin) && (userIp<=end);
}
}
相關推薦
獲取當前訪問客戶端的真實IP地址,辨別是否為內網?
Test.jsp 測試頁面 TestAddress tsetadres = new TestAddress(); String addIP = request.getRemoteAddr(); if(!addIP.equals("")) { String relIp
獲取當前訪問客戶端的真實IP地址(含內網地址)
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用request.getRemoteAd
獲取客戶端真實ip地址
String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("
Java獲取客戶端真實IP地址的兩種方法
在JSP裡,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。 如果使用了反向代理軟體,將http://192.168
如何獲取客戶端真實ip地址
在專案中需要獲取客戶端的真實IP地址,原本使用的是request.getRemoteAddr(),後來釋出到伺服器上時發現取到的值一直是127.0.0.1 原因是,在部署時用了nginx進行反向代理,(小插曲:配nginx的時候一定要記得配 X-Real-I
Java獲取客戶端真實IP地址
1、我們一般在程式開發時,總會用到這種獲取訪問者IP的功能,以便記錄客戶端的登入和訪問行為。一般情況下,我們可以使用 request 的 getRemoteAddr() 方法獲取客戶端實際 IP ,但是 Nginx 使用反向代理後,我們使用 getRemo
php獲取客戶端真實ip地址的三種方法
php獲取使用者(客戶端)真實IP地址的兩種方法 第一種方法,還算靠譜,本人以前一直用的是這個方法: function get_real_ip(){ $ip=false; if(!empty($_SERVER['HTTP_CL
ASP如何獲取客戶端真實IP地址
在ASP中使用 Request.ServerVariables("REMOTE_ADDR") 來取得客戶端的IP地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的IP地址,而不是真正的客戶端IP地址。要想透過代理伺服器取得客戶端的真實IP地址,就要使用 Request.ServerVaria
nginx代理,tomcat部署服務器,後端獲取客戶端真實ip
nginx代理 獲取真實ip 1、環境部署說明後端部署在tomcat服務器上,前端用nginx做代理訪問tomcat部署目錄nginx配置:upstream wcfront{ server localhost:8991;//後臺接口 } server { listen
Java正確獲取客戶端真實IP方法整理
urn con spa syn 服務器端 span tar url 自己的 在JSP裏,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶端的真實
負載均衡後獲取客戶端真實ip
String ip3=request.getRemoteAddr(); 如果沒有配負載均衡,則request.getRemoteAddr() 獲取的就是真實客戶端IP,如果配了nginx負載均衡,則request.getRemoteAddr() 獲取的是負載均衡nginx伺服器的ip,而不是真實
nginx反向代理後應用程式如何獲取客戶端真實IP?
nginx反向代理後應用程式如何獲取客戶端真實IP? 2017年10月30日 10:32:03 it_0101 閱讀數:6200 標籤: tomcatjavawebnginx應用伺服器servlet 更多 個人分類: 學習經驗伺服器 版權宣告
多級nginx代理,獲取客戶端真實ip
今天服務裡的微信公眾號支付業務突然不能用了,報錯為網路環境未能通過安全驗證,請稍後再試。檢查後端日誌,沒有任何問題,看來是成功建立支付訂單,但是調起支付時出現了問題。上網查了一下,這個報錯的直接原因是傳入的客戶端ip與調起支付的ip不符。但是印象中我在程式碼中獲取的是X-Forwarded-For,就是請求來
Java Web 獲取客戶端真實IP
發生的場景:伺服器端接收客戶端請求的時候,一般需要進行簽名驗證,客戶端IP限定等情況,在進行客戶端IP限定的時候,需要首先獲取該真實的IP。一般分為兩種情況: 方式一、客戶端未經過代理,直接訪問伺服器端(nginx,squid,haproxy); 方式二、客戶
Jetty/Tomcat + Nginx反向代理獲取客戶端真實IP、域名、協議、埠
問題 Nginx反向代理後,Servlet應用通過request.getRemoteAddr()取到的IP是Nginx的IP地址,並非客戶端真實IP,通過request.getRequestURL()獲取的域名、協議、埠都是Nginx訪問Web應用時的域名、協
php中獲取nginx代理後的,客戶端真實IP
一般來說,PHP獲取IP用的是$_SERVER[‘REMOTE_ADDR’],但是經過代理後,這個方式獲取到的是代理伺服器的ip,不符合要求!如果需要獲取真實IP該做什麼呢? 1.修改nginx配置:p
nginx負載均衡後tomcat獲取客戶端真實IP
tomcat在未加nginx前端負載均衡的情況下訪問日誌中可以直接拿到客戶端額真實IP地址,但是加了nginx前端負載均衡之後tomcat訪問日誌中得到的為nginx的ip,不是客戶端的ip,獲取客戶端的ip可以參照如下方法: 1. 配置nginx 要解決這
服務端如何獲取客戶端請求IP地址
後端 一個 導致 from 服務 real 直接 控制 web服務 服務端獲取客戶端請求IP地址,常見的包括:x-forwarded-for、client-ip等請求頭,以及remote_addr參數。 一、remote_addr、x-forwarded-for、clien
PHP獲取客戶端真實IP
我們經常要用資料庫記錄使用者的IP,以下程式碼可以獲取客戶端真實的IP://獲取使用者真實IP function getIp() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_C
獲取客戶端真實IP(轉)
@RequestMapping(value=”/test”) @ResponseBody public void test1(HttpServletRequest request,Questionnaire quest,String que