1. 程式人生 > >獲取當前訪問客戶端的真實IP地址,辨別是否為內網?

獲取當前訪問客戶端的真實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