溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

獲取服務(wù)器訪問者IP

發(fā)布時間:2020-07-20 06:10:25 來源:網(wǎng)絡(luò) 閱讀:2882 作者:Red_Ant_hoyl 欄目:開發(fā)技術(shù)

從今年7月24號,沒有玩游戲到現(xiàn)在不知不覺(還是一個來月啊,這記性啊,我還以為過了老長時間了呢?。?。真的像那個相對論中所說的那樣啊,冬天的火堆,夏天的火爐,同樣的時間,在第四維度是不一樣的世界。好了,筆者利用15分鐘的時間,探究一下怎么獲取服務(wù)器訪問者的IP地址。

方法一、java通過request獲取

     /**
            * 獲取當(dāng)前訪問者IP地址
            * @param request 請求
            * @return IP地址
            */
        public static String getVisitIp(HttpServletRequest request) {
            /**
             * 在一般情況下使用Request.getRemoteAddr()即可,
             * 但是經(jīng)過nginx等反向代理軟件后,這個方法會失效。
             * 本方法先從Header中獲取X-Real-IP,
             * 如果不存在再從X-Forwarded-For獲得第一個IP(用,分割),
             * 如果還不存在則調(diào)用Request .getRemoteAddr()
             */
            String ip = request.getHeader("X-Real-IP");
            /**org.apache.commons.lang.StringUtils處理字符串類
             * IsEmpty/IsBlank – 檢查字符串是否有內(nèi)容。
             * IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable – 判斷字符是否在字符串中。
             */
            if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                return ip;
            }
            ip = request.getHeader("X-Forwarded-For");
            if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
                // 多次反向代理后會有多個IP值,第一個為真實IP。
                int index = ip.indexOf(',');
                if (index != -1) {
                    return ip.substring(0, index);
                } else {
                    return ip;
                }
            } else {
                return request.getRemoteAddr();
            }
        }

調(diào)用:

        HttpServletRequest request = ServletActionContext.getRequest();
    String IP = AllServiceIsHere.getVisitIp(request);
    System.err.println(IP);

走你:
獲取服務(wù)器訪問者IP

方法二、java利用request逐步去除代理獲取

public static String getIp(HttpServletRequest request) {```

        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
**同樣調(diào)用:**

HttpServletRequest request = ServletActionContext.getRequest();
String IP = AllServiceIsHere.getIp(request);
System.err.println(IP);

獲取服務(wù)器訪問者IP

方法三、通過js獲?。↖E適配哦,還需要ActiveX控件支持,得到的什么鬼還沒看明白)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/jquery.js" ></script>
</head>
<body>
<div id="20180911"></div>
</body>
<script language=javascript>
var wshNetwork = new ActiveXObject("WScript.Network");
$("#20180911").html("域名 = "+ wshNetwork.UserDomain+"<br/>"

  • "計算機名 = "+ wshNetwork.ComputerName+"<br/>"
  • "登錄用戶名 = "+ wshNetwork.UserName+"<br/>"
    )
    </script>
    </html>

獲取服務(wù)器訪問者IP

啊,還是走后臺吧。省心!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI