0x01 前言:

我们在进行渗透的时候可能会遇到这样的问题,服务器或者系统经常被扫描,通过IP地址我们只能查到某一个市级城市,

当我们想具体到街道甚至门牌号,该怎么办???

0x02:环境:

qq%e6%88%aa%e5%9b%be20161029114342

偶然间发现百度地图有高精度IP定位API的接口,通过该接口我们可以通过IP地址定位到具体的地理位置,甚至能精确到门牌号及周围的标志性建筑。该接口的说明地址为:

http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip

若想要使用该接口进行查询,必须先申请一个密钥(AK),如下图:

qq%e6%88%aa%e5%9b%be20161029114533

点击申请密钥(AK)。登陆你的百度账号,

qq%e6%88%aa%e5%9b%be20161029114753

ip白名单选项,格式: 202.198.16.3,202.198.0.0/16 填写IP地址或IP前缀网段,英文半角逗号分隔如果不想对IP做任何限制,请设置为0.0.0.0/0   这里我们建议设置成0.0.0.0/0毕竟我们不是专业的,只是玩玩而已,点击提交。

qq%e6%88%aa%e5%9b%be20161029114841

申请完成后,这里就是你的专属AK啊·

百度官方的DOC

开放平台提供HTTP/HTTPS类型的API服务接口,开发者通过上传待定位IP,返回该IP对应地址信息,包括经纬度、地址信息(省、市、区、街道等)、周边POI信息、当前位置描述信息等。

目前相关参数如下:

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

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

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

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

接口参数说明

注:暂不支持SN类型的校验。

参数 含义 说明
qcip 待定位IP 可选,如果为空,则针对定位服务的IP进行定位
ak 开发者密钥 必填,进行AK鉴权及配额控制
qterm 待定位终端类型 必填,mb:终端定位设备类型为移动设备
pc:终端定位设备类型为固定设备
extensions 返回结果扩展设定 可选,0(默认):只返回基础定位结果
1:返回基础定位结果+地址信息
2:返回基础定位结果+周边POI信息
3:返回基础定位结果+地址信息+POI信息
coord 返回坐标类型 可选,bd09(默认):百度墨卡托坐标
bd09ll:百度经纬度坐标
gcj02:国测局经纬度坐标
coding 返回结果编码类型 可选,utf-8(默认):返回UTF-8类型
gbk:返回GBK类型
callback_type 回调方式选择 必选,json(默认):json方式
jsonp:jsonp方式,需设置callback参数
callback jsonp回调函数 当callback_type=jsonp时,必填,取值为开发者所设置回调函数名

0x03 接口示例:

1、代码接口示例(callback_type = json)
服务示例:

http://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&qterm=pc&ak=请输入您的AK&coord=bd09ll

https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&qterm=pc&ak=请输入您的AK&coord=bd09ll

返回值:

{
    content: {
        location: {
            lat: 40.047726,#纬度
            lng: 116.313304 #经度
        },
        locid: "8b1bf81d208bc2ce657fb6e6c270de66",#定位结果唯一ID
        radius: 30, #定位结果半径
        confidence: 1 #定位结果可信度
    },
    result: {
        error: 161,#定位结果状态码
        loc_time: "2016-08-23 15:14:12"#定位时间
    }
}

 

2、代码接口示例(callback_type = jsonp)

服务示例:

http://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&qterm=pc&ak=请输入您的AK&coord=bd09ll&callback_type=jsonp&callback=test

https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&qterm=pc&ak=请输入您的AK&coord=bd09ll&callback_type=jsonp&callback=test

返回值:

test
({"content":{
      "location":{
         "lat":40.047726,
         "lng":116.313304
       },
       "locid":"d5ce5ea49ab1efa5a1f2296404b3e7f9",
       "radius":30,"confidence":1.0},
       "result":{"error":161,
       "loc_time":"2016-08-23 14:32:19"
    }
})

 

实战

在地址栏输入:

http://api.map.baidu.com/highacciploc/v1?qcip=125.43.69.132&qterm=pc&ak=请输入你的AK&coord=bd09ll&extensions=3

这是我的的ip地址(好吧,暴露了什么)

qq%e6%88%aa%e5%9b%be20161029131540

此时我们可以把pois字段也提取出来,值得注意的是pois为数组,我们可以遍历数组数据。

通过上面的分析,用python简单的写了一个脚本,具体代码如下:

0x04:代码:

#这个Python脚本是在2.7下运行的,

# -*- coding:utf-8 -*-
import sys
import urllib2
import json
def get_ip_information(ip):
    url='http://api.map.baidu.com/highacciploc/v1?qcip='+ip+'&qterm=pc&ak='你的密钥(AK)'&coord=bd09ll&extensions=3'
    poiss=''
    request = urllib2.Request(url)
    page = urllib2.urlopen(request, timeout=10)
    data_json = page.read()
    data_dic = json.loads(data_json)
    if(data_dic.has_key("content")):
        content=data_dic["content"]
        address_component=content["address_component"]
        formatted_address=content["formatted_address"]
        print "该IP地址的具体位置为:"
        print address_component["country"]
        print formatted_address
        if (content.has_key("pois")):
            print "该IP地址附近POI信息如下:"
            pois = content["pois"]
            for index in range(len(pois)):
                pois_name = pois[index]["name"]
                pois_address = pois[index]["address"]
                print pois_name, pois_address
    else:
        print 'IP地址定位失败!!!'
if __name__ == '__main__':
    get_ip_information('183.55.116.95')

qq%e6%88%aa%e5%9b%be20161029132243

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注