JAVA根据IP地址获取详细的地域信息

在系统中网站的头部一般都有显示是哪个城市的用户进入到网站的首页后默认城市应该是用户本地的城市信息例如北京网站就要根据你的IP地址的信息查询数据获取北京部分的数据呵呵当然我可能描述的不是很清楚但是可以理解成通过IP地址定位地理信息就行。很多人现在使用以QQ数据库为基础获取地址信息但不完整、而且不规范。互联网提供很多其他接口可以完成这项功能.

接口如下

通过淘宝IP地址库获取IP位置

1. 请求接口GEThttp://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]

2. 响应信息json格式的国家 、省自治区或直辖市、市县、运营商

3. 返回数据格式

{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",

"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",

"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",

"county_id":"-1","isp_id":"100017"}}

其中code的值的含义为0成功1失败。

新浪的接口 http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.192.3.42

返回值

var remote_ip_info = {"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"\u4e2d\u56fd","province":"\u5e7f\u4e1c","city":"\u5e7f\u5dde","district":"","isp":"\u6559\u80b2\u7f51","type":"\u5b66\u6821","desc":"\u5e7f\u5dde\u5927\u5b66\u7eba\u7ec7\u670d\u88c5\u5b66\u9662"};

通过jqry 获取相应的数据

$.getScript(‘数据接口‘,function(){

//新浪remote_ip_info.country

})

根据腾讯IP分享计划的地址获取IP所在地

http://ip.qq.com/cgi-bin/searchip?searchip1=218.192.3.42

实例

 package com.gocheck.common.utils.ipmanager;
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地址获取详细的地域信息
 *  @project:personGocheck
 *  @class:AddressUtils.java
 *  @author:heguanhua E-mail:[email protected]
 *  @dateNov 14, 2012 6:38:25 PM
 */
public class AddressUtils {  
 /**
  * 
  * @param content
  *            请求的参数 格式为name=xxx&pwd=xxx
  * @param encoding
  *            服务器端请求编码。如GBK,UTF-8等
  * @return
  * @throws UnsupportedEncodingException
  */
 public String getAddresses(String content, String encodingString)
   throws UnsupportedEncodingException {
  // 这里调用pconline的接口
  String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
  // 从http://whois.pconline.com.cn取得IP所在的省市区信息
  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;
 }
 /**
  * @param urlStr
  *            请求的地址
  * @param content
  *            请求的参数 格式为name=xxx&pwd=xxx
  * @param encoding
  *            服务器端请求编码。如GBK,UTF-8等
  * @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(2000);// 设置连接超时时间单位毫秒
   connection.setReadTimeout(2000);// 设置读取数据超时时间单位毫秒
   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));// 往对端写完数据对端服务器返回数据
   // ,以BufferedReader流来读取
   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) {
  AddressUtils addressUtils = new AddressUtils();
  // 测试ip 219.136.134.157 中国=华南=广东省=广州市=越秀区=电信
  String ip = "122.49.20.247";
  String address = "";
  try {
   address = addressUtils.getAddresses("ip="+ip, "utf-8");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println(address);
  // 输出结果为广东省,广州市,越秀区
 }
}
时间: 2024-10-13 21:36:34

JAVA根据IP地址获取详细的地域信息的相关文章

通过IP地址获取省份城市位置信息

private String mResult = null; private String mProvinceName; //省份 private String mChCityName; //城市 private int GET_CITY_SUCCESS = 1; private int GET_CITY_FAILURE = 2; //Handler接收到消息进行处理,取出需要的信息 privateHandler mHandler = new Handler() { public void ha

获取IP地址的详细信息——Java

代码 import com.alibaba.fastjson.JSON; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; /** * 根据IP地址获取详细的地域信息 * * @author Yawei Xi * @date 2018-10-13 */ public class IPUtil { private s

C# 根据IP地址获取城市

1 using System; 2 using System.IO; 3 using System.Net; 4 using System.Text; 5 using System.Web.Script.Serialization; 6 7 namespace IpUtils 8 { 9 public class IpDetail 10 { 11 public String Ret { get; set; } 12 13 public String Start { get; set; } 14

PHP 根据IP地址获取所在城市

有这样的需求,需要根据用户的IP地址,定位用户所在的城市. 本文记录性文章,无逻辑性.有这样需求的朋友,可以直接拷贝使用.直接上代码,不需赘述. <?php header('Content-Type:text/html;Charset=utf-8'); function GetIp(){ $realip = ''; $unknown = 'unknown'; if (isset($_SERVER)){ if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) &&

js根据ip地址获取所在城市

话不多说,直接贴代码! 将这段代码运行一下就OK了: <html xmlns=""> <head runat="server"> <title>根据IP地址获取所在城市</title> <scriptsrc="?format=js"type="text/ecmascript"></script> <script type="text/jav

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令

linux配置网卡IP地址命令详细介绍及一些常用网络配置命令2010-12-17 0 个评论 收藏 我要投稿 Linux命令行下配置IP地址不像图形界面下那么方 便,完全需要我们手动配置,下面就给大家介绍几种配置的方法: 即时生效(重启后失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 route add default gw 192.168.1.1 //添加网关 启动生效: vim /etc/sysconfig/ne

根据IP地址获取用户的mac地址

根据实际需要可以使用以下的代码 获取MAC地址. /**  * 根据IP地址获取mac地址  * @param ipAddress 127.0.0.1  * @return  * @throws SocketException  * @throws UnknownHostException  */ public static String getLocalMac(String ipAddress) throws SocketException, UnknownHostException { //

js通过IP地址获取所在城市

话不多说,直接贴代码! 将这段代码运行一下就OK了: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>根据IP地址获取所在城市</title> <scriptsrc="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"type

小工具-IP地址获取和设置及端口访问验证(windows)

技术部在业务部门眼里就是后勤部门,业务部门要搬到新大楼去 领导要求去帮忙调试业务人员的电脑,要保证这些大爷们周一上班来,就喝着茶打开新浪,然后打开OA看看. 手上就几个桌面支持的兄弟,要弄一百台多电脑,再看看桌面支持参差不齐的技术能力,于是给他们写了个小工具,让他们能快速实现 IP地址获取,IP地址设置,管理员权限赋权,业务系统端口验证 技术说明: 1.使用一款普通用户运行需要管理员权限的软件(CPAU.exe)支持,赋权或IP设置都通过CPAU做转换,实现普通用户实现管理员功能. 使用用例: