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

在甲方工作的朋友可能会遇到这样的问题,服务器或者系统经常被扫描,通过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。这是官方给出的数据,所说有一定的概率是查询失败的!!!!

转自FreeBuf:http://www.freebuf.com/sectool/117164.html

时间: 2024-11-05 19:47:06

实用技巧:如何通过IP地址进行精准定位的相关文章

php 通过 ip地址 进行城市定位

ip城市定位新浪接口: /** * 新浪ip 地址获取城市信息 */ //根据ip 地址获取所在城市信息 function getIPLoc_sina($queryIP){ $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP; $ch = curl_init($url); curl_setopt($ch,CURLOPT_ENCODING ,'utf8'); curl_setopt

python实现ip地址查询经纬度定位

# -*- coding: utf-8 -*- """ @Time: 2017/8/11 11:22 @Author: sunxiang """ import urllib import urllib2 import json import sys reload(sys) sys.setdefaultencoding('utf-8') class SendUrl(object): def send_url(self, url, headers,

三种方法告诉你项目超过255个摄像机怎么设置IP?为什么IP地址通常以192.168开头?

我们做弱电的,与ip地址接触最多,无论是弱电的哪方面,都需要跟ip地址打交道,通常我们也会经常听到公网.内网?那什么是公网ip地址呢?什么是私网ip地址呢?为什么我们常见到的ip地址以192.168开头呢? 还有就是一个网段只能容纳254个摄像机,但是我现在项目比较大,都有300多个摄像机了,该咋分配IP地址呢? 我们今天统统来了解一下. 首先关于内.外网的定义:内.外网是相对于防火墙而言的,在防火墙内部叫做内网,反之就是外网.在一定程度上外网等同于公网,内网等同于私网. 一.特殊的IP地址 1

大型监控网络系统规划ip地址实例

导读 对于监控项目来说,很多故障的原因都是跟ip地址设置不当有关,如ip冲突,或者有几路监控图像没有显示等,都是跟ip有一定关联,合理的分配ip地址十分重要.为什么要合理分配IP?对于小型监控项目来说,ip地址的设置比较简单,大部分的人都不会出错,对于超过254个点位的监控项目来说,就有些容易出错了. 为什么呢? 第一.如果超过254个点位不划分网段的话,让系统自动分配ip地址的话,容易产生ip冲突. 第二.如果划分网段的话,在ip地址的分配与子网掩码的设置成了问题,部分朋友对ip地址分配不熟,

[转]验证E-mail、用户名、社保号、IP地址等10个实用的PHP正则表达式

1. 验证E-mail地址 这是一个用于验证电子邮件的正则表达式.但它并不是高效.完美的解决方案.在此不推荐使用. $email = "[email protected]"; if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) { echo "Your email is ok.";

文本过滤之——grep,sort,wc,uniq,tr, 精准过滤IP地址,A类地址,B类地址.... 并排序

文本过滤之IP地址精准过滤 在写之前自己整理了一点自己平时老是搞混的东西,最基础的就不写了,前面的东西不想看得一眼代过,就当借着做IP过滤顺便整理下常用的,看看后面如何精准锁定IP地址吧. 一.正则表达式(PATRERN) 括号() 方括号[] 尖括号<> 大括号{} 的使用 \[\]  匹配指定范围内的任意单个字符 [^] 用于匹配指定对象之外的任意单个字符 ^[] 用于匹配指定对象并且在行首的任意单个字符 \(\) 用作后向引用,也可以用于限定或(\|)的作用域 \1 引用第一个左括号及其

API精准定位IP地址

突然发现百度的API越来越好用了,简单使用百度API精准定位IP地址.附Python代码 分类:Python (4778)  (5) 2016年11月27日08:13:13 API服务地址:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 使用方法:第一步,申请密钥(AK) ,作为访问服务的依据:第二步,拼写发送HTTP/HTTPS请求的URL,注意需使用第一步申请的AK:第三步,接收HTTP/HTTPS请求返回的数据(JSON

深度技术W10系统中绑定MAC地址和IP地址的设置技巧

深度技术W10系统中绑定MAC地址和IP地址的设置技巧分享给大家,感兴趣的用户,请一起来了解下,以备以后作参考,具体如下:1.点击“开始——搜索”,输入CMD命令,然后在CMD上右键选择以管理员身份运行.2.在打开的命令行窗口中,输入 netsh i i show in运行,在以上显示内容中找到你用来上网连接的Idx号码,在下面命令中使用 (比如小编这里上网的网卡是“WLAN”所以Idx为5). 3.在命令提示符窗口输入:arp -a 查看各个IP与对应的mac地址 4.输入netsh -c "

redis技巧--IP地址查询对应城市

场景: 根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了. 我们有城市和IP地址段的对应关系,如: 上海: 202.127.0.0 ~ 202.127.4.255 北京: 122.200.64.0 ~ 122.207.255.255 此时如果用户的IP地址为122.202.2.0,我们就能根据这个表知道他的地址位于北京. 方法: 使用有序集合记录这个表,每个城市存储两条数据,一条是城市名对应的分数为最大IP地址.另一条是“#”加上城市名对应的分数