您的位置:首页 > 其它

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

2016-10-27 22:45 1916 查看
*本文原创作者:allen权,转载须注明来自FreeBuf.COM

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





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

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

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





申请过程就不进行说明了。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 。请求结果如下图:





结果为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的测试截图:





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

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

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





allen权1篇文章等级:1级



|

|

上一篇:走近科学:希拉里团队邮箱是如何被黑客入侵的

下一篇:渗透利器Weevely之奇淫技巧篇


这些评论亮了



暮暮回复
测了一下,挺精准的,也就偏差个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楼

这个要赞一个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: