package com.panzhihua.common.utlis;
|
|
import com.alibaba.fastjson.JSONObject;
|
import lombok.extern.slf4j.Slf4j;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
|
/**
|
* @author huaping hu
|
* @version 1.0
|
* @ClassName: IPUtil
|
* @Desc: Ip工具类
|
* @date 2016年6月1日下午5:26:56
|
* @history v1.0
|
*/
|
@Slf4j
|
public class IPUtil {
|
|
/**
|
* 描述:获取IP地址
|
*
|
* @param request
|
* @return
|
* @author huaping hu
|
* @date 2016年6月1日下午5:25:44
|
*/
|
public static String getIpAddress(HttpServletRequest request) {
|
if (request == null) {
|
return "unknown";
|
}
|
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("X-Forwarded-For");
|
}
|
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("X-Real-IP");
|
}
|
|
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
|
ip = request.getRemoteAddr();
|
}
|
|
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
|
}
|
|
|
/**
|
* 描述:获取IP+[IP所属地址]
|
*
|
* @param request
|
* @return
|
* @author huaping hu
|
* @date 2016年6月1日下午6:01:09
|
*/
|
public static String getIpBelongAddress(HttpServletRequest request) {
|
|
String ip = getIpAddress(request);
|
String belongIp = getIPbelongAddress(ip);
|
|
return ip + belongIp;
|
}
|
|
/**
|
* 描述:获取IP所属地址
|
*
|
* @param ip
|
* @return
|
* @author huaping hu
|
* @date 2016年6月1日下午5:59:43
|
*/
|
public static String getIPbelongAddress(String ip) {
|
|
String ipAddress = "[]";
|
try {
|
// 淘宝提供的服务地址
|
String context = call("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip);
|
JSONObject fromObject = JSONObject.parseObject(context);
|
String code = fromObject.getString("code");
|
if (code.equals("0")) {
|
JSONObject jsonObject = fromObject.getJSONObject("data");
|
ipAddress = "[" + jsonObject.get("country") + "/" + jsonObject.get("city") + "]";
|
}
|
} catch (Exception e) {
|
log.error("获取IP所属地址出错");
|
// e.printStackTrace();
|
}
|
return ipAddress;
|
}
|
|
/**
|
* 描述:获取Ip所属地址
|
*
|
* @param urlStr
|
* @return
|
* @author huaping hu
|
* @date 2016年6月1日下午5:38:55
|
*/
|
public static String call(String urlStr) {
|
|
try {
|
|
URL url = new URL(urlStr);
|
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
|
|
httpCon.setConnectTimeout(3000);
|
httpCon.setDoInput(true);
|
httpCon.setRequestMethod("GET");
|
|
int code = httpCon.getResponseCode();
|
|
if (code == 200) {
|
return streamConvertToSting(httpCon.getInputStream());
|
}
|
} catch (Exception e) {
|
log.error("获取IP所属地址出错", e);
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 描述:将InputStream转换成String
|
*
|
* @param is
|
* @return
|
* @author huaping hu
|
* @date 2016年6月1日下午5:51:53
|
*/
|
public static String streamConvertToSting(InputStream is) {
|
|
String tempStr = "";
|
try {
|
|
if (is == null)
|
return null;
|
ByteArrayOutputStream arrayOut = new ByteArrayOutputStream();
|
byte[] by = new byte[1024];
|
int len = 0;
|
while ((len = is.read(by)) != -1) {
|
arrayOut.write(by, 0, len);
|
}
|
tempStr = new String(arrayOut.toByteArray());
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return tempStr;
|
}
|
|
public static void main(String[] args) {
|
|
String context = call("http://ip.taobao.com/service/getIpInfo.php?ip=120.192.182.1");
|
|
JSONObject fromObject = JSONObject.parseObject(context);
|
JSONObject jsonObject = fromObject.getJSONObject("data");
|
System.out.println(fromObject);
|
System.err.println(jsonObject.get("city"));
|
}
|
}
|