黑帽联盟

 找回密码
 会员注册
查看: 1839|回复: 6
打印 上一主题 下一主题

[系统安全] 利用百度地图实现高精度定位

  [复制链接]

9

主题

3

听众

36

积分

黑帽菜鸟

Rank: 1

  • TA的每日心情
    奋斗
    2018-11-2 01:35
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    本帖最后由 dormant 于 2016-12-13 23:47 编辑

    0x00介绍   

    高精度IP定位目前只支持WiFi链接上网情况下的使用,其原理是实时建库和百度大数据分析挖掘,因此相比于普通IP定位能返回更加精确的定位结果。

    目前相关参数如下:

    成功率:综合定位成功率 65%

    精度:90% 误差 80m 以内;95% 误差 350m

    如果高精度定位失败的话,直接返回普通IP定位结果。

    高精度IP定位服务和普通IP定位服务并存,两个服务的配额不同,定位效果也不同,请开发者结合自身业务合理选择。


    0x01准备工具

    1.申请请密钥(AK),作为访问API的依据

    2.下载HttpClient.jar,用于进行http/https请求

    httpclient_jar.zip

    3.下载json-ib,用于处理json

    json-lib.rar

    0x02编写代码

    1.编写实体类用于处理json返回数据

    public class IpEntity {        //需要定位的ip        private String ip;        public String getIp() {                return ip;        }        public void setIp(String ip) {                this.ip = ip;        }        //纬度坐标         private String lat;        //经度坐标         private String lng;        //详细地址        private String address;        public String getLat() {                return lat;        }        public void setLat(String lat) {                this.lat = lat;        }        public String getLng() {                return lng;        }        public void setLng(String lng) {                this.lng = lng;        }        //定位时间        private String loc_time;        //返回代码        private String error;        public String getAddress() {                return address;        }        public void setAddress(String address) {                this.address = address;        }        public String getLoc_time() {                return loc_time;        }        public void setLoc_time(String loc_time) {                this.loc_time = loc_time;        }        public String getError() {                return error;        }        public void setError(String error) {                this.error = error;        }}

    2.编写方法,调用百度高精度定位API

    /*** ip定位* @param ip 需要定位的Ip* @return  地址实体对象* */public static IpEntity IpTest(String ip){        CloseableHttpClient httpClient  = null;        HttpGet httpGet = null;        CloseableHttpResponse response = null;        IpEntity ipEntity = null;        try {                httpClient =  HttpClients.createDefault();                //String ip = "59.109.64.160";                String ak = "9w0bGND7tWoDQlbC2IGT3VGxe73rlEUG";                //请求url                String url = "https://api.map.baidu.com/highacciploc/v1?qcip="+ip+"&ak="+ak+"&qterm=pc&extensions=1&coord=bd09ll&callback_type=json";                httpGet = new HttpGet(url);                //System.out.println(httpGet.getURI());                //执行get请求                response = httpClient.execute(httpGet);                //获取请求返回字符串                HttpEntity entity = response.getEntity();                //请求状态码                //System.out.println(response.getStatusLine());                if(entity != null){                        //长度                        //System.out.println("length:"+entity.getContentLength());                        String tmp = EntityUtils.toString(entity);                        //将json字符串转换为json对象                        JSONObject jsonObject = JSONObject.fromObject(tmp);                        //定位时间                        String loc_time = JSONObject.fromObject(jsonObject.getString("result")).getString("loc_time");                        //获取定位代码  161 位定位成功                        String error = JSONObject.fromObject(jsonObject.getString("result")).getString("error");                        //获取结构化地址                        String address = JSONObject.fromObject(jsonObject.getString("content")).getString("formatted_address");                        //纬度坐标                         String lat = JSONObject.fromObject(JSONObject.fromObject(jsonObject.getString("content")).getString("location")).getString("lat");                        //经度坐标                         String lng = JSONObject.fromObject(JSONObject.fromObject(jsonObject.getString("content")).getString("location")).getString("lng");                        ipEntity = new IpEntity();                        ipEntity.setError(error);                        ipEntity.setIp(ip);                        ipEntity.setAddress(address);                        ipEntity.setLoc_time(loc_time);                        ipEntity.setLat(lat);                        ipEntity.setLng(lng);                }        } catch (Exception e) {                e.printStackTrace();                return null;        }finally{                try {                        response.close();                        httpClient.close();                } catch (IOException e) {                        e.printStackTrace();                }        }        return ipEntity;}

    3.编写main方法调用

    /** *  测试方法 * @param args*/public static void main(String[] args) {        IpEntity ipEntity = test.IpTest("59.109.64.160");        if(ipEntity != null){                //判断返回状态吗是否为161 定位成功                if(ipEntity.getError().equals("161")){                        System.out.println("定位成功!");                        System.out.println("定位ip为:"+ipEntity.getIp());                        System.out.println("定位时间:"+ipEntity.getLoc_time());                        System.out.println("具体位置:"+ipEntity.getAddress());                        System.out.println("经度为:"+ipEntity.getLat());                        System.out.println("维度为:"+ipEntity.getLng());                }        }}
    JAVA代码打包:
    游客,如果您要查看本帖隐藏内容请回复
    已有 1 人评分黑币 收起 理由
    admin + 3 希望楼主发布更多好的帖子!

    总评分: 黑币 + 3   查看全部评分

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    295

    主题

    18

    听众

    965

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    难过
    3 天前
  • 签到天数: 370 天

    [LV.9]以坛为家II

    楼主测试过没有,牛叉

    点评

    dormant  你可以测试下撒  详情 回复 发表于 2016-12-14 00:08
    回复

    使用道具 举报

    9

    主题

    3

    听众

    36

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情
    奋斗
    2018-11-2 01:35
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    admin 发表于 2016-12-14 00:06
    楼主测试过没有,牛叉

    你可以测试下撒
    回复

    使用道具 举报

    6

    主题

    0

    听众

    33

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情
    无聊
    2018-1-9 21:25
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    什么东西表示看不懂,学习一下
    回复

    使用道具 举报

    0

    主题

    0

    听众

    42

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情

    2017-3-5 22:08
  • 签到天数: 7 天

    [LV.3]偶尔看看II

      厉害了!
    回复

    使用道具 举报

    0

    主题

    0

    听众

    2

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情
    难过
    2017-2-6 14:07
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    1

    主题

    0

    听众

    345

    积分

    黑帽学员

    Rank: 3Rank: 3

  • TA的每日心情

    2020-1-22 01:58
  • 签到天数: 115 天

    [LV.6]常住居民II

    hen牛逼啊··········
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部