根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息。

源码如下:(点击下载  IpAddress.java)

  1. import java.io.BufferedReader;
  2. import java.io.DataOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.UnsupportedEncodingException;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8.  
  9. /**
  10. * 根据IP地址获取详细的地域信息
  11. * 也可通过 http://whois.pconline.com.cn/ 获取地址信息
  12. *
  13. * 作者: zhoubang
  14. * 日期:2015年8月7日 上午10:25:00
  15. */
  16. public class IpAddress {
  17.  
  18. /**
  19. * 获取IP所在地址
  20. *
  21. * 作者: zhoubang
  22. * 日期:2015年8月7日 上午10:26:57
  23. * @param content
  24. * @param encodingString
  25. * @return
  26. * @throws UnsupportedEncodingException
  27. */
  28. public String getAddresses(String content, String encodingString)
  29. throws UnsupportedEncodingException {
  30. // 淘宝的接口
  31. String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
  32. String returnStr = this.getResult(urlStr, content, encodingString);
  33. if (returnStr != null) {
  34. // 处理返回的省市区信息
  35. System.out.println(returnStr);
  36. String[] temp = returnStr.split(",");
  37. if (temp.length < 3) {
  38. return "0";// 无效IP,局域网测试
  39. }
  40. String region = (temp[5].split(":"))[1].replaceAll("\"", "");
  41. region = decodeUnicode(region);// 省份
  42.  
  43. String country = "";
  44. String area = "";
  45. // String region = "";
  46. String city = "";
  47. String county = "";
  48. String isp = "";
  49. for (int i = 0; i < temp.length; i++) {
  50. switch (i) {
  51. case 1:
  52. country = (temp[i].split(":"))[2].replaceAll("\"", "");
  53. country = decodeUnicode(country);// 国家
  54. break;
  55. case 3:
  56. area = (temp[i].split(":"))[1].replaceAll("\"", "");
  57. area = decodeUnicode(area);// 地区
  58. break;
  59. case 5:
  60. region = (temp[i].split(":"))[1].replaceAll("\"", "");
  61. region = decodeUnicode(region);// 省份
  62. break;
  63. case 7:
  64. city = (temp[i].split(":"))[1].replaceAll("\"", "");
  65. city = decodeUnicode(city);// 市区
  66. break;
  67. case 9:
  68. county = (temp[i].split(":"))[1].replaceAll("\"", "");
  69. county = decodeUnicode(county);// 地区
  70. break;
  71. case 11:
  72. isp = (temp[i].split(":"))[1].replaceAll("\"", "");
  73. isp = decodeUnicode(isp); // ISP公司
  74. break;
  75. }
  76. }
  77.  
  78. System.out.println(country + "=" + area + "=" + region + "=" + city + "=" + county + "=" + isp);
  79. return region;
  80. }
  81. return null;
  82. }
  83.  
  84. /**
  85. * 请求接口
  86. *
  87. * 作者: zhoubang
  88. * 日期:2015年8月7日 上午10:27:45
  89. * @param urlStr
  90. * @param content
  91. * @param encoding
  92. * @return
  93. */
  94. private String getResult(String urlStr, String content, String encoding) {
  95. URL url = null;
  96. HttpURLConnection connection = null;
  97. try {
  98. url = new URL(urlStr);
  99. connection = (HttpURLConnection) url.openConnection();// 新建连接实例
  100. connection.setConnectTimeout(10000);// 设置连接超时时间,单位毫秒
  101. connection.setReadTimeout(10000);// 设置读取数据超时时间,单位毫秒
  102. connection.setDoOutput(true);// 是否打开输出流 true|false
  103. connection.setDoInput(true);// 是否打开输入流true|false
  104. connection.setRequestMethod("POST");// 提交方法POST|GET
  105. connection.setUseCaches(false);// 是否缓存true|false
  106. connection.connect();// 打开连接端口
  107. DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
  108. out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
  109. out.flush();// 刷新
  110. out.close();// 关闭输出流
  111. BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
  112. StringBuffer buffer = new StringBuffer();
  113. String line = "";
  114. while ((line = reader.readLine()) != null) {
  115. buffer.append(line);
  116. }
  117. reader.close();
  118. return buffer.toString();
  119. } catch (IOException e) {
  120. e.printStackTrace();
  121. } finally {
  122. if (connection != null) {
  123. connection.disconnect();// 关闭连接
  124. }
  125. }
  126. return null;
  127. }
  128.  
  129. /**
  130. * unicode 转换成 中文
  131. *
  132. * @author fanhui 2007-3-15
  133. * @param theString
  134. * @return
  135. */
  136. public static String decodeUnicode(String theString) {
  137. char aChar;
  138. int len = theString.length();
  139. StringBuffer outBuffer = new StringBuffer(len);
  140. for (int x = 0; x < len;) {
  141. aChar = theString.charAt(x++);
  142. if (aChar == '\\') {
  143. aChar = theString.charAt(x++);
  144. if (aChar == 'u') {
  145. int value = 0;
  146. for (int i = 0; i < 4; i++) {
  147. aChar = theString.charAt(x++);
  148. switch (aChar) {
  149. case '0':
  150. case '1':
  151. case '2':
  152. case '3':
  153. case '4':
  154. case '5':
  155. case '6':
  156. case '7':
  157. case '8':
  158. case '9':
  159. value = (value << 4) + aChar - '0';
  160. break;
  161. case 'a':
  162. case 'b':
  163. case 'c':
  164. case 'd':
  165. case 'e':
  166. case 'f':
  167. value = (value << 4) + 10 + aChar - 'a';
  168. break;
  169. case 'A':
  170. case 'B':
  171. case 'C':
  172. case 'D':
  173. case 'E':
  174. case 'F':
  175. value = (value << 4) + 10 + aChar - 'A';
  176. break;
  177. default:
  178. throw new IllegalArgumentException("Malformed encoding.");
  179. }
  180. }
  181. outBuffer.append((char) value);
  182. } else {
  183. if (aChar == 't') {
  184. aChar = '\t';
  185. } else if (aChar == 'r') {
  186. aChar = '\r';
  187. } else if (aChar == 'n') {
  188. aChar = '\n';
  189. } else if (aChar == 'f') {
  190. aChar = '\f';
  191. }
  192. outBuffer.append(aChar);
  193. }
  194. } else {
  195. outBuffer.append(aChar);
  196. }
  197. }
  198. return outBuffer.toString();
  199. }
  200.  
  201. // 测试
  202. public static void main(String[] args) {
  203. IpAddress addressUtils = new IpAddress();
  204. String ip = "27.54.227.84";
  205. String address = "";
  206. try {
  207. address = addressUtils.getAddresses("ip=" + ip, "utf-8");
  208. } catch (UnsupportedEncodingException e) {
  209. e.printStackTrace();
  210. }
  211. System.out.println(address);
  212. // 输出结果为:中国=华东=安徽省=滁州市==
  213. // 安徽省
  214. }
  215. }

IP工具类——IpAddress.java的更多相关文章

  1. 系统获取 IP 工具类

    系统获取 IP 工具类 import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterf ...

  2. Java 获取IP工具类、Vo类整理记录

    前言 日常开发中,获取ip是常用的功能,本文记录如何在Java中获取本机外网ip.地理位置,访问用户的外网ip.地理位置,以及指定外网ip的地理位置: 代码编写 1.获取访问用户外网ip,我们从访问者 ...

  3. Java常用工具类---IP工具类、File文件工具类

    package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...

  4. java获取真实ip工具类

    场景 有的时候我们需要获取客户端的真实ip,用来实现ip白名单,和黑名单的配置! ip工具类如下 package com.meeno.framework.utils; import javax.ser ...

  5. IP工具类-自己动手做个ip解析器

    IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:

  6. IP工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletReques ...

  7. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  8. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  9. Java字符串转16 进制工具类Hex.java

    Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...

随机推荐

  1. JDK 动态代理分析

    Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于 ...

  2. overflow: hidden用法,不仅仅是隐藏溢出

    overflow:hidden是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. <!DOCTYPE html> <html ...

  3. 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。

    答:解1:  select top 10 * from A where id not in (select top 30 id from A) 解2:  select top 10 * from A ...

  4. 使用CocoaPods遇到的几个坑,记录一下

    最近使用pod的时候升级到1.0.0版本后遇到一些坑,整理一下 首先是CocoaPods报错:The dependency `` is not used in any concrete target ...

  5. js事件模型

    连接在此 http://www.cnblogs.com/zqstc/archive/2009/11/26/1611464.html

  6. 介绍SmartUpload很好的网站

    附带链接:http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html

  7. Unity3D 3D坦克大战

    视频学习来源 移动和旋转 using UnityEngine; using System.Collections; /* * Adminer:sun2955 * http:www.yinghy.com ...

  8. Android XML解析

    解析XML有三种方式:Dom.SAX.Pull 其中pull解析器运行方式与SAX类似. 我们首先认识pull解析器:http://developer.android.com/intl/zh-cn/r ...

  9. php注册登录时生成的验证码

    http://blog.sina.com.cn/s/blog_8173443e01012l82.html 记得我学php时第一件事就是研究登陆注册.当然,登陆少不了验证码.两年过去了,昨天突然想用个验 ...

  10. 学习笔记_过滤器详细(过滤器JavaWeb三大组件之一)

    过滤器详细 1 过滤器的生命周期 我们已经学习过Servlet的生命周期,那么Filter的生命周期也就没有什么难度了! (l)  init(FilterConfig):在服务器启动时会创建Filte ...