实用技巧:如何通过IP地址进行精准定位

*本文原创作者:allen权,转载须注明来自FreeBuf.COM

在甲方工作的朋友可能会遇到这样的问题,服务器或者系统经常被扫描,通过IP地址我们只能查到某一个市级城市,如下图:

实用技巧:如何通过IP地址进行精准定位_第1张图片

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

偶然间发现百度地图有高精度IP定位API的接口,通过该接口我们可以通过IP地址定位到具体的地理位置,甚至能精确到门牌号及周围的标志性建筑。该接口的说明地址为:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip

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

实用技巧:如何通过IP地址进行精准定位_第2张图片

申请过程就不进行说明了。API的接口参数说明和返回参数说明也不过多的介绍,大家可以看一看。因为我想返回基础定位结果+地址信息+POI信息,所以我将请求参数extensions的值设置为3。一次完整的http请求为:http://api.map.baidu.com/highacciploc/v1?qcip=183.55.116.90&qterm=pc&ak=“你的 密钥(AK)”&coord=bd09ll&extensions=3 。请求结果如下图:

实用技巧:如何通过IP地址进行精准定位_第3张图片

结果为json格式数据:

{"content":{"location":{"lat":23.06588,"lng":115.404586},"locid":"925a2a9e3ac5be1cf003afd23c344ab3","radius":30,"confidence":0.5,"address_component":{"country":"中国","province":"广东省","city":"汕尾市","district":"海丰县","street":"新平路","street_number":"","admin_area_code":441521},"formatted_address":"广东省汕尾市海丰县新平路","business":"公平"},"result":{"error":161,"loc_time":"2016-10-19 21:53:28"}}

我们需要的字段为:content字段里面的formatted_address。当然我们也可以将location里面的经度和纬度提取出来从而显示在地图上面。有的IP地址会返回pois数据,比如:183.55.116.95。返回参数如下:

{"content":{"location":{"lat":23.082367,"lng":115.466276},"locid":"3fb96555906fff3100ff21119142ccd5","radius":30,"confidence":1.0,"address_component":{"country":"中国","province":"广东省","city":"汕尾市","district":"海丰县","street":"S335","street_number":"","admin_area_code":441521},"formatted_address":"广东省汕尾市海丰县S335","pois":[{"name":"双墩村","address":"汕尾市海丰县三三五省道","tag":"行政地标;村庄","location":{"lat":23.082422,"lng":115.465348},"uid":"18010998377147269119"},{"name":"双墩村委会","address":"汕尾市海丰县","tag":"政府机构;各级政府","location":{"lat":23.083394,"lng":115.465914},"uid":"17661602237861855231"},{"name":"长联塘尾","address":"汕尾市海丰县","tag":"行政地标;村庄","location":{"lat":23.081358,"lng":115.467315},"uid":"18010998372852301823"},{"name":"双墩小学","address":"335省道附近","tag":"教育培训;小学","location":{"lat":23.083336,"lng":115.465061},"uid":"17661601958688980991"},{"name":"大溪头","address":"汕尾市海丰县","tag":"行政地标;村庄","location":{"lat":23.090326,"lng":115.465995},"uid":"18010998368557334527"}],"location_description":"双墩村东104米"},"result":{"error":161,"loc_time":"2016-10-19 22:03:31"}}

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

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

# -*- coding:utf-8 -*-
# author:allen权
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')

大家把脚本上面的参数ak值改为自己的密钥即可。测试截图如下:

实用技巧:如何通过IP地址进行精准定位_第4张图片

再放一张自己IP的测试截图:

实用技巧:如何通过IP地址进行精准定位_第5张图片

确实精确到了路名,很准确,虽然没有pois的信息。

最后声明一下,成功率:综合定位成功率 65%  ,精度:90% 误差 80m 以内;95% 误差 350m。这是官方给出的数据,所说有一定的概率是查询失败的!!!!

*本文原创作者:allen权,转载须注明来自FreeBuf.COM

这些评论亮了

  • 暮暮 回复
    测了一下,挺精准的,也就偏差个10来公里而已
    ) 143 ( 亮了
  • mengxp 回复
    这个东西应该是移动端收集数据传送到远程服务器,然后服务器维护了一个大数据库。
    如果被查询的ip从来没有接入过移动设备,或者接入的移动设备没有百度的应用,就查不到任何信息。
    我刚查询了我的vps的ip地址(阿里云vps),返回信息什么都没有。
    {"result":{"error":167,"loc_time":"2016-10-26 11:34:53"}}
    ) 19 ( 亮了
  • cnboy 回复
    【评论中包含不友善的言论,已被多人举报】
    ) 18 ( 亮了
  • yyy3333 回复
    不过撸主的帖子真的在13年就有讲。
    但是我不知道 现在知道啦 一次知道两个知识点 还不够好么。。
    如果你早就知道 你就淡淡一笑 深藏功与名 不够好么。。
    何必喷楼主…… 真正的强者是不是强在实际行动 而不是嘴炮 你又不是漩涡鸣人
    http://blog.csdn.net/daixinmei/article/details/10219893
    ) 7 ( 亮了
发表评论

已有 44 条评论

  • andy88  (5级) 我相信我加入互联网,就是我未来的路、希望有大神关注http:...  2016-10-26 回复 1楼

    感谢发表作者~~带小弟弟我飞吧。

    亮了( 4)
  • Mr_Null  (1级)  2016-10-26 回复 2楼

    拿我家乡的IP想干嘛?

    亮了( 4)
  • cnboy  2016-10-26 回复 3楼

    【评论中包含不友善的言论,已被多人举报】

    亮了( 18)
    • cheuk  (1级)  2016-10-26 回复

      @ cnboy 请问什么才叫有意义??

      亮了( 2)
    • pipish  (3级)  2016-10-26 回复

      @ cnboy 你能耐你怎么不发啊

      亮了( 3)
    • asdf  2016-10-26 回复

      @ cnboy 不装逼能死吧你

      亮了( 2)
    • D14tr0y  (2级)  2016-10-26 回复

      @ cnboy 我感觉这篇文章挺好的啊

      亮了( 0)
    • 干死你 CNboy  2016-10-26 回复

      @ cnboy 你是什么东西?No can No BB

      亮了( 2)
    • 麻花腾  2016-10-26 回复

      @ cnboy 你厉害,发个有意义的我看看

      亮了( 1)
  • 干掉你  (1级)  2016-10-26 回复 4楼

    赞!

    亮了( 1)
  • 暮暮  2016-10-26 回复 5楼

    测了一下,挺精准的,也就偏差个10来公里而已

    亮了( 143)
    • blueanima  (1级)  2016-10-27 回复

      @ 暮暮 别把无知当勇气,有本事你发一个精确的啊,只会调侃。

      亮了( 1)
  • 楼主是2b  2016-10-26 回复 6楼

    谷歌地图:23.0797859486,115.4711522560
    百度地图:23.0856931705,115.4776824973
    低端秀。拿ip随便查就有经纬度了,经纬度到地图上地址不都一样吗

    腾讯高德:23.0797668500,115.4711411100
    图吧地图:23.0748070000,115.4651160000
    谷歌地球:23.0823670000,115.4662760000
    北纬N23°04′56.52″ 东经E115°27′58.59″

    靠近:广东省汕尾市海丰县S335
    参考:广东省汕尾市海丰县平东镇双墩村东北方向约1.10公里

    亮了( 5)
    • Mr_Null  (1级)  2016-10-26 回复

      @ 楼主是2b 这个可以可以,不过你能不能换个公共点的ip啊

      亮了( 3)
  • word  2016-10-26 回复 7楼

    可以,很实用

    亮了( 1)
  • mengxp  2016-10-26 回复 8楼

    这个东西应该是移动端收集数据传送到远程服务器,然后服务器维护了一个大数据库。
    如果被查询的ip从来没有接入过移动设备,或者接入的移动设备没有百度的应用,就查不到任何信息。
    我刚查询了我的vps的ip地址(阿里云vps),返回信息什么都没有。
    {"result":{"error":167,"loc_time":"2016-10-26 11:34:53"}}

    亮了( 19)
  • 戒贤  (4级) 一只混迹在安全圈子边缘的调酒师  2016-10-26 回复 9楼

    :?:
    不管怎么说….你努力了,你开心就好。

    亮了( 1)
  • notolddriver  (1级)  2016-10-26 回复 10楼

    您查询的IP:183.55.116.90 相关信息:
    本站数据:广东省汕尾市 电信
    参考数据1:中国 华南 广东省 汕尾市 电信
    参考数据2:中国 广东 汕尾 电信
    参考数据3:广东省汕尾市 电信
    参考数据4:中国 广东 汕尾 海丰 中国电信
    参考数据5:广东省汕尾市海丰县中学前一街()
    参考数据6:广东省汕尾市海丰县怡丰街东151号->在康民诊所附近, 在怡丰街旁边, 靠近东丽路–怡丰街路口

    亮了( 1)
    • Mr_Null  (1级)  2016-10-26 回复

      @ notolddriver  = =你想干嘛= =

      亮了( 0)
  • 马化腾  2016-10-26 回复 11楼

    拿我家乡的IP想干嘛?

    亮了( 2)
  • bendawang  (1级)  2016-10-26 回复 12楼

    学习了,正好需要这个。。不过有的数据是错的

    亮了( 0)
  • 过萧剑  2016-10-26 回复 13楼

    原理是什么呀

    亮了( 0)
  • 如影随行忙着  2016-10-26 回复 14楼

    怎么拿到别人的ip,这个再出个文章吧

    亮了( 0)
  • Flands  (1级)  2016-10-26 回复 15楼

    {"result":{"error":200,"loc_time":"1477468987"}}
    ??

    亮了( 3)
  • xufengnian  (1级)  2016-10-26 回复 16楼

    个人感觉挺不错的,谢谢大兄弟了

    亮了( 1)
  • EmonLieu刘  2016-10-26 回复 17楼

    前段时间还在想原理

    亮了( 1)
  • boy  (1级)  2016-10-26 回复 18楼

    http://www.hao7188.com/

    亮了( 2)
  • yyy3333  2016-10-26 回复 19楼

    不过撸主的帖子真的在13年就有讲。
    但是我不知道 现在知道啦 一次知道两个知识点 还不够好么。。
    如果你早就知道 你就淡淡一笑 深藏功与名 不够好么。。
    何必喷楼主…… 真正的强者是不是强在实际行动 而不是嘴炮 你又不是漩涡鸣人
    http://blog.csdn.net/daixinmei/article/details/10219893

    亮了( 7)
    • 漩涡鸣人  2016-10-27 回复

      @ yyy3333 我招你惹你了?

      亮了( 4)
  • 黑衣人先生  2016-10-26 回复 20楼

    三角定位法

    亮了( 0)
  • 369  2016-10-26 回复 21楼

    广东省汕尾市海丰县梅兴一路144号->在梅陇卫生站附近, 在梅兴一路旁边, 靠近梅兴一路–西兴中路路口

    亮了( 1)
  • raycel  (1级)  2016-10-26 回复 22楼

    网民的ip是动态,你能查到地址? 能查到ip的,只有固定ip,如服务器,公司的,网吧的,电信热点的。

    亮了( 1)
  • masterzh01  2016-10-26 回复 23楼

    准不准?

    亮了( 0)
  • skew  2016-10-26 回复 24楼

    不过百度准吗,有一次一个ip,实际上在美国,百度告诉我在直布罗陀。。。还是说国内的ip会准一些?

    亮了( 1)
  • nilin  (4级)  2016-10-26 回复 25楼

    膜拜,不但对API分析的很透彻,还能利用python实例出来,厉害

    亮了( 0)
  • raven  (1级)  2016-10-26 回复 26楼

    百度的API很多,我以前也用过一个天气的,好久没再去看了

    亮了( 2)
  • MonologueThin  2016-10-26 回复 27楼

    不是都有人搞出来分享了么

    亮了( 0)
  • 百度ceo  2016-10-27 回复 28楼

    http://ditu.amap.com/service/pl/pl.json 高德精度维度 非SDK
    http://map.baidu.com/?qt=ipLocation 百度精度维度 非SDK
    https://api.map.baidu.com/highacciploc/v1?qcip=IP地址&ak=YIogecncCOvlq2oGgWqnYRUCWhKma8dY&qterm=pc&extensions=1&callback_type=json
    不用那么麻烦..增加一个IP的协议头即可…高德的要比百度的好很多.
    基本上 原理就是维护一个大的数据表 然后 根据手机等定位信息 去刷新表.同一IP 内 无上网定位的手机 或者 导航 之类的智能设备是查不到的.
    还有一种就是 根据 电信商的机房分布 每期区段是维护的 可以根据区段 大体定位 定位精准 需要去机房查接口了..

    亮了( 5)
  • 1  2016-10-27 回复 29楼

    t.cn/RVhm1EH

    亮了( 0)
  • 123  2016-10-27 回复 30楼

    能不能定位到妹子的卧室啊[dog]

    亮了( 1)
  • papapa123  2016-10-27 回复 31楼

    这种文章也发》。….这智商;令人捉急

    亮了( 0)
  • cafexss  (4级) 咖啡'a  2016-10-27 回复 32楼

    喷子真多!!!

    亮了( 0)
  • BBBe  2016-10-27 回复 33楼

    我APP的IP定位都搞出来- -你现在才发文章….而且是这样没有营养的- -这样的接口一大堆

    亮了( 0)
  • KDKJ  (1级)  2016-10-27 回复 34楼

    这个要赞一个

你可能感兴趣的:(基础数据调研)