package com.yeshi.buwan.util; import com.google.gson.Gson; import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.lionsoul.ip2region.xdb.Searcher; import javax.servlet.http.HttpServletRequest; import java.io.BufferedInputStream; import java.io.File; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; public class IPUtil { static { } public static String getRemotIP(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; } /** * 获取远程端口 * * @param request * @return */ public static int getRemotePort(HttpServletRequest request) { return request.getRemotePort(); } public static IPInfo getLocalIPInfo(String ip) throws Exception { String appcode = "46789780da4f4d92885c3d39b97e3ba9"; // 通过阿里云的接口获取IP信息 String url = "https://zjip.market.alicloudapi.com/lifeservice/QueryIpAddr/query?ip=" + URLEncoder.encode(ip, "UTF-8"); // 网络请求 HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(2000); GetMethod method = new GetMethod(url); method.setRequestHeader("Authorization", "APPCODE " + appcode); client.executeMethod(method); String result = method.getResponseBodyAsString(); System.out.println(result); JSONObject data = JSONObject.fromObject(result); if (data.optInt("error_code") == 0) { data = data.optJSONObject("result"); IPInfo ipInfo = new IPInfo(data.optString("country"), data.optString("province"), data.optString("city")); return ipInfo; } else { throw new Exception(data.optString("reason")); } } public static class IPInfo { private String province; private String city; private String country; public IPInfo(String country, String province, String city) { this.province = province; this.city = city; this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } } public static void main(String[] args) { try { IPInfo info = getLocalIPInfo("113.250.254.8"); System.out.println(new Gson().toJson(info)); info = getLocalIPInfo("193.112.35.168"); System.out.println(new Gson().toJson(info)); } catch (Exception e) { e.printStackTrace(); } } }