package com.jilongda.common.utils; import com.alibaba.fastjson.JSONObject; import com.jilongda.common.exception.ServiceException; 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; import java.util.HashMap; import java.util.Map; /** * @author xiaochen * @version 1.0 * @ClassName: IPUtil * @Desc: Ip工具类 * @date 2021/12/21 * @history v1.0 */ public class IPUtil { /** * 描述:获取IP地址 * * @param request * @return * @author xiaochen * @date 2021/12/21 */ public static String getIpAddress(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(); } // 如果是多级代理,那么取第一个IP为客户端IP if (ip != null && ip.indexOf(",") != -1) { ip = ip.substring(0, ip.indexOf(",")).trim(); } return 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?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) { e.printStackTrace(); throw new ServiceException("获取IP所属地址出错", e); } 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) { e.printStackTrace(); throw new ServiceException("获取IP所属地址出错", e); } 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; } /** * 获取用户ip地址 * * @return */ public static String getUserIp() { HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); //获取IP地址 return getIpAddress(request); } public static String getUserLocationByIp() { String url = "https://restapi.amap.com/v3/ip"; Map paramMap = new HashMap<>(); paramMap.put("key", "5935f1310fa27e918e99c620f2afb39f"); paramMap.put("ip", getUserIp()); String result1 = HttpUtils.getReq(url, paramMap); JSONObject jsonObject = JSONObject.parseObject(result1); IpLocation ipLocation = jsonObject.toJavaObject(IpLocation.class); return ipLocation.getProvince() + ipLocation.getCity(); } 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")); } }