zoukankan      html  css  js  c++  java
  • IP工具类——IpAddress.java

    根据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 = '	';
    185                     } else if (aChar == 'r') {
    186                         aChar = '
    ';
    187                     } else if (aChar == 'n') {
    188                         aChar = '
    ';
    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 }
  • 相关阅读:
    我和LEGO Mindstroms NXT(1)
    [翻译]介绍Xbox LIVE社区游戏
    想做一个显示全国火车运行图的网站(1)想想
    [翻译]CCR and DSS Toolkit 2008 发布了
    我和LEGO Mindstroms NXT(2)
    [翻译]机器人游戏可以下载了!
    vs的form标签引起css走样问题
    做个md5查询站(1)从8年前说开去
    [翻译]Microsoft Robotics Developer Sutdio 2008 7月CTP发布了
    做个md5查询站(3)数据格式
  • 原文地址:https://www.cnblogs.com/zhoubang521/p/5200060.html
Copyright © 2011-2022 走看看