IP工具类——IpAddress.java
根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息。
源码如下:(点击下载 IpAddress.java)
- import java.io.BufferedReader;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.HttpURLConnection;
- import java.net.URL;
- /**
- * 根据IP地址获取详细的地域信息
- * 也可通过 http://whois.pconline.com.cn/ 获取地址信息
- *
- * 作者: zhoubang
- * 日期:2015年8月7日 上午10:25:00
- */
- public class IpAddress {
- /**
- * 获取IP所在地址
- *
- * 作者: zhoubang
- * 日期:2015年8月7日 上午10:26:57
- * @param content
- * @param encodingString
- * @return
- * @throws UnsupportedEncodingException
- */
- public String getAddresses(String content, String encodingString)
- throws UnsupportedEncodingException {
- // 淘宝的接口
- String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
- String returnStr = this.getResult(urlStr, content, encodingString);
- if (returnStr != null) {
- // 处理返回的省市区信息
- System.out.println(returnStr);
- String[] temp = returnStr.split(",");
- if (temp.length < 3) {
- return "0";// 无效IP,局域网测试
- }
- String region = (temp[5].split(":"))[1].replaceAll("\"", "");
- region = decodeUnicode(region);// 省份
- String country = "";
- String area = "";
- // String region = "";
- String city = "";
- String county = "";
- String isp = "";
- for (int i = 0; i < temp.length; i++) {
- switch (i) {
- case 1:
- country = (temp[i].split(":"))[2].replaceAll("\"", "");
- country = decodeUnicode(country);// 国家
- break;
- case 3:
- area = (temp[i].split(":"))[1].replaceAll("\"", "");
- area = decodeUnicode(area);// 地区
- break;
- case 5:
- region = (temp[i].split(":"))[1].replaceAll("\"", "");
- region = decodeUnicode(region);// 省份
- break;
- case 7:
- city = (temp[i].split(":"))[1].replaceAll("\"", "");
- city = decodeUnicode(city);// 市区
- break;
- case 9:
- county = (temp[i].split(":"))[1].replaceAll("\"", "");
- county = decodeUnicode(county);// 地区
- break;
- case 11:
- isp = (temp[i].split(":"))[1].replaceAll("\"", "");
- isp = decodeUnicode(isp); // ISP公司
- break;
- }
- }
- System.out.println(country + "=" + area + "=" + region + "=" + city + "=" + county + "=" + isp);
- return region;
- }
- return null;
- }
- /**
- * 请求接口
- *
- * 作者: zhoubang
- * 日期:2015年8月7日 上午10:27:45
- * @param urlStr
- * @param content
- * @param encoding
- * @return
- */
- private String getResult(String urlStr, String content, String encoding) {
- URL url = null;
- HttpURLConnection connection = null;
- try {
- url = new URL(urlStr);
- connection = (HttpURLConnection) url.openConnection();// 新建连接实例
- connection.setConnectTimeout(10000);// 设置连接超时时间,单位毫秒
- connection.setReadTimeout(10000);// 设置读取数据超时时间,单位毫秒
- connection.setDoOutput(true);// 是否打开输出流 true|false
- connection.setDoInput(true);// 是否打开输入流true|false
- connection.setRequestMethod("POST");// 提交方法POST|GET
- connection.setUseCaches(false);// 是否缓存true|false
- connection.connect();// 打开连接端口
- DataOutputStream out = new DataOutputStream(connection.getOutputStream());// 打开输出流往对端服务器写数据
- out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx
- out.flush();// 刷新
- out.close();// 关闭输出流
- BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
- StringBuffer buffer = new StringBuffer();
- String line = "";
- while ((line = reader.readLine()) != null) {
- buffer.append(line);
- }
- reader.close();
- return buffer.toString();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (connection != null) {
- connection.disconnect();// 关闭连接
- }
- }
- return null;
- }
- /**
- * unicode 转换成 中文
- *
- * @author fanhui 2007-3-15
- * @param theString
- * @return
- */
- public static String decodeUnicode(String theString) {
- char aChar;
- int len = theString.length();
- StringBuffer outBuffer = new StringBuffer(len);
- for (int x = 0; x < len;) {
- aChar = theString.charAt(x++);
- if (aChar == '\\') {
- aChar = theString.charAt(x++);
- if (aChar == 'u') {
- int value = 0;
- for (int i = 0; i < 4; i++) {
- aChar = theString.charAt(x++);
- switch (aChar) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- value = (value << 4) + aChar - '0';
- break;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- value = (value << 4) + 10 + aChar - 'a';
- break;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- value = (value << 4) + 10 + aChar - 'A';
- break;
- default:
- throw new IllegalArgumentException("Malformed encoding.");
- }
- }
- outBuffer.append((char) value);
- } else {
- if (aChar == 't') {
- aChar = '\t';
- } else if (aChar == 'r') {
- aChar = '\r';
- } else if (aChar == 'n') {
- aChar = '\n';
- } else if (aChar == 'f') {
- aChar = '\f';
- }
- outBuffer.append(aChar);
- }
- } else {
- outBuffer.append(aChar);
- }
- }
- return outBuffer.toString();
- }
- // 测试
- public static void main(String[] args) {
- IpAddress addressUtils = new IpAddress();
- String ip = "27.54.227.84";
- String address = "";
- try {
- address = addressUtils.getAddresses("ip=" + ip, "utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- System.out.println(address);
- // 输出结果为:中国=华东=安徽省=滁州市==
- // 安徽省
- }
- }
IP工具类——IpAddress.java的更多相关文章
- 系统获取 IP 工具类
系统获取 IP 工具类 import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterf ...
- Java 获取IP工具类、Vo类整理记录
前言 日常开发中,获取ip是常用的功能,本文记录如何在Java中获取本机外网ip.地理位置,访问用户的外网ip.地理位置,以及指定外网ip的地理位置: 代码编写 1.获取访问用户外网ip,我们从访问者 ...
- Java常用工具类---IP工具类、File文件工具类
package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...
- java获取真实ip工具类
场景 有的时候我们需要获取客户端的真实ip,用来实现ip白名单,和黑名单的配置! ip工具类如下 package com.meeno.framework.utils; import javax.ser ...
- IP工具类-自己动手做个ip解析器
IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:
- IP工具类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletReques ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- Java字符串转16 进制工具类Hex.java
Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...
随机推荐
- JDK 动态代理分析
Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于 ...
- overflow: hidden用法,不仅仅是隐藏溢出
overflow:hidden是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. <!DOCTYPE html> <html ...
- 写出一条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 ...
- 使用CocoaPods遇到的几个坑,记录一下
最近使用pod的时候升级到1.0.0版本后遇到一些坑,整理一下 首先是CocoaPods报错:The dependency `` is not used in any concrete target ...
- js事件模型
连接在此 http://www.cnblogs.com/zqstc/archive/2009/11/26/1611464.html
- 介绍SmartUpload很好的网站
附带链接:http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html
- Unity3D 3D坦克大战
视频学习来源 移动和旋转 using UnityEngine; using System.Collections; /* * Adminer:sun2955 * http:www.yinghy.com ...
- Android XML解析
解析XML有三种方式:Dom.SAX.Pull 其中pull解析器运行方式与SAX类似. 我们首先认识pull解析器:http://developer.android.com/intl/zh-cn/r ...
- php注册登录时生成的验证码
http://blog.sina.com.cn/s/blog_8173443e01012l82.html 记得我学php时第一件事就是研究登陆注册.当然,登陆少不了验证码.两年过去了,昨天突然想用个验 ...
- 学习笔记_过滤器详细(过滤器JavaWeb三大组件之一)
过滤器详细 1 过滤器的生命周期 我们已经学习过Servlet的生命周期,那么Filter的生命周期也就没有什么难度了! (l) init(FilterConfig):在服务器启动时会创建Filte ...