java获取客户端的ip 和IP所在地

获取客户端的IP

package com.credit.util;



import java.net.InetAddress;
import java.net.UnknownHostException;


import javax.servlet.http.HttpServletRequest;


public class GetIp {
/**
* @param request 
* @return
*/
public static String getRemoteHost(javax.servlet.http.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.getRemoteAddr();
    }
    return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;
}

  public static String getIpAddress(HttpServletRequest request){
          
          String ipAddress = request.getHeader("x-forwarded-for");
          
          if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
              ipAddress = request.getHeader("Proxy-Client-IP");
          }
          if (ipAddress == null || ipAddress.length() == 0 || "unknow".equalsIgnoreCase(ipAddress)) {
              ipAddress = request.getHeader("WL-Proxy-Client-IP");
         }
         if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getRemoteAddr();
            
            if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
                 //根据网卡获取本机配置的IP地址
                 InetAddress inetAddress = null;
                 try {
                     inetAddress = InetAddress.getLocalHost();
                 } catch (UnknownHostException e) {
                     e.printStackTrace();
                 }
                 ipAddress = inetAddress.getHostAddress();
             }
         }
        
         //对于通过多个代理的情况,第一个IP为客户端真实的IP地址,多个IP按照','分割
         if(null != ipAddress && ipAddress.length() > 15){
             //"***.***.***.***".length() = 15
             if(ipAddress.indexOf(",") > 0){
                 ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
             }
         }
         
         return ipAddress;
     }
  

}



获取客户端的ip所在地


package com.credit.util;




import java.io.BufferedReader;  
import java.io.DataOutputStream;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.UnsupportedEncodingException;  
import java.net.HttpURLConnection;  
import java.net.URL;


import javax.servlet.http.HttpServletRequest;


import org.apache.commons.lang.StringUtils;


import net.sf.json.JSONObject;  
  
public class AddressUtils {  
    /** 
     *  
     * @param content 


     * @return 
     * @throws UnsupportedEncodingException 
     */  
    public static String getAddresses(String content, String encodingString)  
            throws UnsupportedEncodingException {  


        String urlStr = "http://ip.taobao.com/service/getIpInfo.php";  
    
        String returnStr = getResult(urlStr, content, encodingString);  
        if (returnStr != null) {  
         
            System.out.println("(1) unicode to chinese before eturnStr : " + returnStr);  
            returnStr = decodeUnicode(returnStr);  
            System.out.println("(2) unicode to chinese after eturnStr : " + returnStr);  
            String[] temp = returnStr.split(",");  
            if(temp.length<3){  
                return "0"; 
            }  
            return returnStr;  
        }  
        return null;  
    }  
    /** 


     * @return 
     */  
    private static String getResult(String urlStr, String content, String encoding) {  
        URL url = null;  
        HttpURLConnection connection = null;  
        try {  
            url = new URL(urlStr);  
            connection = (HttpURLConnection) url.openConnection();  
            connection.setConnectTimeout(2000);
            connection.setReadTimeout(2000);
            connection.setDoOutput(true);
            connection.setDoInput(true); 
            connection.setRequestMethod("POST");  
            connection.setUseCaches(false);
            connection.connect(); 
            DataOutputStream out = new DataOutputStream(connection  
                    .getOutputStream());
            out.writeBytes(content);  
            out.flush();  
            out.close(); 
            BufferedReader reader = new BufferedReader(new InputStreamReader(  
                    connection.getInputStream(), encoding));  
            StringBuffer buffer = new StringBuffer();  
            String line = "";  
            while ((line = reader.readLine()) != null) {  
                buffer.append(line);  
            }  
            reader.close();  
            return buffer.toString();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (connection != null) {  
                connection.disconnect();
            }  
        }  
        return null;  
    }  
    /** 
     * unicode to chinese
     *  
     * @author fanhui 2007-3-15 
     * @param theString 
     * @return 
     */  
    public static String decodeUnicode(String theString) {  
        char aChar;  
        int len = theString.length();  
        StringBuffer outBuffer = new StringBuffer(len);  
        for (int x = 0; x < len;) {  
            aChar = theString.charAt(x++);  
            if (aChar == '\\') {  
                aChar = theString.charAt(x++);  
                if (aChar == 'u') {  
                    int value = 0;  
                    for (int i = 0; i < 4; i++) {  
                        aChar = theString.charAt(x++);  
                        switch (aChar) {  
                        case '0':  
                        case '1':  
                        case '2':  
                        case '3':  
                        case '4':  
                        case '5':  
                        case '6':  
                        case '7':  
                        case '8':  
                        case '9':  
                            value = (value << 4) + aChar - '0';  
                            break;  
                        case 'a':  
                        case 'b':  
                        case 'c':  
                        case 'd':  
                        case 'e':  
                        case 'f':  
                            value = (value << 4) + 10 + aChar - 'a';  
                            break;  
                        case 'A':  
                        case 'B':  
                        case 'C':  
                        case 'D':  
                        case 'E':  
                        case 'F':  
                            value = (value << 4) + 10 + aChar - 'A';  
                            break;  
                        default:  
                            throw new IllegalArgumentException(  
                                    "Malformed      encoding.");  
                        }  
                    }  
                    outBuffer.append((char) value);  
                } else {  
                    if (aChar == 't') {  
                        aChar = '\t';  
                    } else if (aChar == 'r') {  
                        aChar = '\r';  
                    } else if (aChar == 'n') {  
                        aChar = '\n';  
                    } else if (aChar == 'f') {  
                        aChar = '\f';  
                    }  
                    outBuffer.append(aChar);  
                }  
            } else {  
                outBuffer.append(aChar);  
            }  
        }  
        return outBuffer.toString();  
    }  
    public static void main(String[] args)  
    {  
        try  
        {  
            String addressByIp = getAddressByIp("");
            System.out.println(addressByIp);
        }  
        catch (Exception e)  
        {  
            e.printStackTrace();  
        } finally {
}  
    }  
      
    public static  String getAddressByIp(String ip) throws Exception {  
    // ip = "219.136.134.157";  
    
          
        String json_result = null;  
        try {  
            json_result = AddressUtils.getAddresses("ip=" + ip, "utf-8");  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        JSONObject json = JSONObject.fromObject(json_result);
        String city = "";
        if(json != null ){
        System.out.println("json" + json);  
        if(json.containsKey("data")){
        city = JSONObject.fromObject(json.get("data")).get("city").toString();  
        }
        }
        //String country = JSONObject.fromObject(json.get("data")).get("country").toString();  
       // String region = JSONObject.fromObject(json.get("data")).get("region").toString();  
        //String county = JSONObject.fromObject(json.get("data")).get("county").toString();  
        //String isp = JSONObject.fromObject(json.get("data")).get("isp").toString();  
        //String area = JSONObject.fromObject(json.get("data")).get("area").toString();  
        
        return city;
    }  
    
    public static String getIp2(HttpServletRequest request) {
                 String ip = request.getHeader("X-Forwarded-For");
                if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
                     //多次反向代理后会有多个ip值,第一个ip才是真实ip
                     int index = ip.indexOf(",");
                     if(index != -1){
                         return ip.substring(0,index);
                     }else{
                         return ip;
                    }
                }
                ip = request.getHeader("X-Real-IP");
                if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
                    return ip;
                }
               return request.getRemoteAddr();
           }
}  




注意!此信息未认证,请谨慎判断信息的真实性!

全部评论
空

相关内容推荐

头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
01-07 18:24
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像 头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
2022-12-28 02:13
门头沟学院_2024
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享

全站热榜

正在热议