From 010ef2a907e66efd4702443c06cdd18f8a7ffa5b Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 30 十月 2024 14:08:53 +0800 Subject: [PATCH] IP归属地查询接口集成 --- src/main/java/com/yeshi/buwan/util/IPUtil.java | 430 +++++++++++++++++++---------------------------------- 1 files changed, 158 insertions(+), 272 deletions(-) diff --git a/src/main/java/com/yeshi/buwan/util/IPUtil.java b/src/main/java/com/yeshi/buwan/util/IPUtil.java index 14bc15f..6ea66e0 100644 --- a/src/main/java/com/yeshi/buwan/util/IPUtil.java +++ b/src/main/java/com/yeshi/buwan/util/IPUtil.java @@ -1,304 +1,190 @@ package com.yeshi.buwan.util; +import com.google.gson.Gson; +import com.show.api.ShowApiRequest; +import net.sf.json.JSONObject; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.methods.GetMethod; +import org.lionsoul.ip2region.xdb.Searcher; +import org.yeshi.utils.HttpUtil; + +import javax.servlet.http.HttpServletRequest; import java.io.BufferedInputStream; +import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.methods.GetMethod; - -import net.sf.json.JSONObject; - public class IPUtil { - // http://verx.daili666.com/ip/?tid=558287898012218&num=1&operator=2 - public static void changeIp() { - System.getProperties().setProperty("proxySet", "true"); // 濡傛灉涓嶈缃紝鍙浠g悊IP鍜屼唬鐞嗙鍙f纭�,姝ら」涓嶈缃篃鍙互 - System.getProperties().setProperty("http.proxyHost", "213.85.92.10"); - System.getProperties().setProperty("http.proxyPort", "80"); - LogUtil.i(getHtml("http://www.ip138.com/ip2city.asp")); // 鍒ゆ柇浠g悊鏄惁璁剧疆鎴愬姛 - } + private static Searcher searcher; - private static String getHtml(String address) { - StringBuffer html = new StringBuffer(); - String result = null; - try { - URL url = new URL(address); - URLConnection conn = url.openConnection(); - conn.setRequestProperty("User-Agent", - "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)"); - BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); - try { - String inputLine; - byte[] buf = new byte[4096]; - int bytesRead = 0; - while (bytesRead >= 0) { - inputLine = new String(buf, 0, bytesRead, "ISO-8859-1"); - html.append(inputLine); - bytesRead = in.read(buf); - inputLine = null; - } - buf = null; - } finally { - in.close(); - conn = null; - url = null; - } - result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - html = null; - return result; - } + static { + try { + URL url = IPUtil.class.getClassLoader().getResource("ip2region.xdb"); + String path = new File(url.toURI()).getAbsolutePath(); + byte[] vIndex = Searcher.loadVectorIndexFromFile(path); + searcher = Searcher.newWithVectorIndex(path, vIndex); + } catch (Exception e) { + e.printStackTrace(); + } + } - // 娌℃湁鎵惧埌浠g悊IP - // 閲嶅簡 - public static String getDaiLiIP(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod( + // http://verx.daili666.com/ip/?tid=558287898012218&num=1&operator=2 + public static void changeIp() { + System.getProperties().setProperty("proxySet", "true"); // 濡傛灉涓嶈缃紝鍙浠g悊IP鍜屼唬鐞嗙鍙f纭�,姝ら」涓嶈缃篃鍙互 + System.getProperties().setProperty("http.proxyHost", "213.85.92.10"); + System.getProperties().setProperty("http.proxyPort", "80"); + LogUtil.i(getHtml("http://www.ip138.com/ip2city.asp")); // 鍒ゆ柇浠g悊鏄惁璁剧疆鎴愬姛 + } - "http://verx.daili666.com/ip/?tid=559511877530791&num=1&operator=2&filter=on&area=" - + URLEncoder.encode(area, "UTF-8") + ""); - } catch (UnsupportedEncodingException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } + private static String getHtml(String address) { + StringBuffer html = new StringBuffer(); + String result = null; + try { + URL url = new URL(address); + URLConnection conn = url.openConnection(); + conn.setRequestProperty("User-Agent", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727; CIBA)"); + BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); + try { + String inputLine; + byte[] buf = new byte[4096]; + int bytesRead = 0; + while (bytesRead >= 0) { + inputLine = new String(buf, 0, bytesRead, "ISO-8859-1"); + html.append(inputLine); + bytesRead = in.read(buf); + inputLine = null; + } + buf = null; + } finally { + in.close(); + conn = null; + url = null; + } + result = new String(html.toString().trim().getBytes("ISO-8859-1"), "gb2312").toLowerCase(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + html = null; + return result; + } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - sendNoticeEmail(result); - LogUtil.i(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + private static void sendNoticeEmail(String get) { + if (get != null && get.contains("璁㈠崟鍓╀綑鏁伴噺涓嶈冻")) { + /* + * MailSenderUtil.sendEmail("1101184511@qq.com", "绯荤粺鎻愮ず:IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻", + * "IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻锛岃鐧诲綍鍒颁唬鐞�666鍏呭��"); + */ + } + } - public static String getDaiLiIP1(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod( + 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; + } - "http://verx.daili666.com/ip/?tid=559186334744019&num=1&area=" + URLEncoder.encode(area, "UTF-8") - + ""); - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - sendNoticeEmail(result); - LogUtil.i(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } - // 鎴愰兘 + /** + * 鑾峰彇杩滅▼绔彛 + * + * @param request + * @return + */ + public static int getRemotePort(HttpServletRequest request) { + return request.getRemotePort(); + } - public static String getDaiLiIP2(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod("http://verx.daili666.com/ip/?tid=558287898012218&num=1&filter=on&area=" - + URLEncoder.encode(area, "UTF-8"));// &area="+ - // URLEncoder.encode(area, - // "UTF-8") + " - } catch (Exception e1) { - e1.printStackTrace(); - } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - sendNoticeEmail(result); - LogUtil.i(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + 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 String getDaiLiIP3(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod("http://verx.daili666.com/ip/?tid=557489926231876&num=1&filter=on&area=" - + URLEncoder.encode(area, "UTF-8") + ""); - } catch (UnsupportedEncodingException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - sendNoticeEmail(result); - LogUtil.i(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + public static class IPInfo { + private String province; + private String city; + private String country; - public static String getDaiLiIP4(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod("http://verx.daili666.com/ip/?tid=556436495975069&num=1&area=" - + URLEncoder.encode(area, "UTF-8") + ""); - } catch (UnsupportedEncodingException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - sendNoticeEmail(result); - LogUtil.i(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + public IPInfo(String country, String province, String city) { + this.province = province; + this.city = city; + this.country = country; + } - public static String getDaiLiIP5(String area) { - HttpClient client = new HttpClient(); - GetMethod get = null; - try { - get = new GetMethod("http://verx.daili666.com/ip/?tid=559418280288916&num=1&filter=on&area=" - + URLEncoder.encode(area, "UTF-8") + ""); + public String getProvince() { + return province; + } - } catch (UnsupportedEncodingException e1) { - e1.printStackTrace(); - } - try { - client.executeMethod(get); - String result = get.getResponseBodyAsString(); - LogUtil.i(result); - sendNoticeEmail(result); - if (!result.contains("娌℃湁鎵惧埌")) - return result; - else - return null; - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + public void setProvince(String province) { + this.province = province; + } - private static void sendNoticeEmail(String get) { - if (get != null && get.contains("璁㈠崟鍓╀綑鏁伴噺涓嶈冻")) { - /* - * MailSenderUtil.sendEmail("1101184511@qq.com", "绯荤粺鎻愮ず:IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻", - * "IP璁㈠崟鍓╀綑鏁伴噺涓嶈冻锛岃鐧诲綍鍒颁唬鐞�666鍏呭��"); - */ - } - } + public String getCity() { + return city; + } - 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; - } + public void setCity(String city) { + this.city = city; + } - public static Map<String, String> getIPInfo(String ip) { - Map<String, String> map = new HashMap<String, String>(); - HttpClient client = new HttpClient(); - GetMethod method = new GetMethod("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip); - try { - client.executeMethod(method); - String result = method.getResponseBodyAsString(); - JSONObject object = JSONObject.fromObject(result); - if (object.optInt("code") == 0) { - map.put("city", object.optJSONObject("data").optString("city")); - map.put("country", object.optJSONObject("data").optString("country")); - return map; - } + public String getCountry() { + return country; + } - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return map; - } + public void setCountry(String country) { + this.country = country; + } + } - public static String getIPContry(String ip) { - HttpClient client = new HttpClient(); - GetMethod method = new GetMethod("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip); - try { - client.executeMethod(method); - String result = method.getResponseBodyAsString(); - JSONObject object = JSONObject.fromObject(result); - if (object.optInt("code") == 0) { - return object.optJSONObject("data").optString("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(); + } - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - return ""; - } + } } -- Gitblit v1.8.0