获取客户端的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();
           }
}