IP 地址怎么定位?

Wesley13
• 阅读 666

IP 地址怎么定位?

我们经常可以在影视作品中见到某某组织通过对某个人的 IP 地址进行监控,定位其位置,甚至精确到某栋大楼的某一层,如此可怕的场景在现实生活中真的有可能会发生吗?

先来说结果,仅通过 IP 地址最精确能够达到街道级别。而且在不通过运营商的用户数据库查询情况下,定位到家庭住址和单元楼的情况难度很高。

ISP

在《互联网是如何工作的》[1]一文中,我们介绍道,IP 地址是类似于现实世界中的地址这样的东西,通过 IP 地址,我们就可以在网络上定位到一台计算机,在现实世界中,IP 地址是由一个叫互联网服务提供商,即 ISP 提供的。

回想一下我们上网的过程:

去运营商(移动、电信、联通)办理宽带业务 -> 业务员上门拉线 -> 电脑连接宽带 -> 访问互联网

在这一过程中,三大运营商就是我们能接触到的 ISP 的,ISP 可以从互联网管理机构申请到很多 IP 地址,然后一些机构和个人从某个 ISP 获取 IP 地址的使用权,并可通过该 ISP 连接到互联网。

那么 ISP 又是如何标记 IP 地址的地理位置的呢?

我们先来说说 ISP 的三层结构。

三层 ISP 结构分为主干 ISP,地区 ISP,本地 ISP。本地 ISP 给用户提供最直接的服务,本地 ISP 可以连接到地区 ISP,也可以连接到主干 ISP。从原理上讲。只要每一个本地 ISP 都安装了路由器连接到某个地区 ISP,而每一个地区 ISP 也有路由器连接到主干 ISP,那么在这些相互连接的 ISP 的共同作用下,就可以完成互联网中的所有的分组转发任务。

这里我们通过计算机网络教材中的一张图来理解三层结构,如图 1 所示 👇

IP 地址怎么定位?

也就是说,当你向好友发了一条微信,这条微信首先会从你所在公司/学校的内网上发到当地的服务器,再从当地服务器发送到地区服务器,之后从地区服务器通过移动/联通/电信的服务器向你好友所在地的地区服务器转发,再通过本地服务器最终转发到好友所在公司/学校的内网。

如此一来,既然你的 IP 地址是由当地的 ISP 分配给你的,自然也就知道了你所在的 IP 地址的大致位置了。

IXP

在图 1 中,我们发现图中还有一个叫 IXP 的东西,这里简单扩展一下,还是以发微信为例,如果每次发微信的都将数据先发到本地 ISP,然后发到地区 ISP,然后再发到主干 ISP,通过这样的链路将数据传输到对方的设备上,显然是不合理的,如果流量过大,有没有什么优化方案?

显而易见,当然是有的,我们可以通过在低层 ISP 之间搭桥的方式,让流量不走主干 ISP,直接在地区 ISP 之间直接相连进行交换分组,这样一来可以降低延时,二来还可以降低费用(走高层主干 ISP 收费一定比直接走底层地区 ISP 贵)。

精确定位

通过上一小节的讲解我们知道了可以通过申请的运营商的地址判断你的 大致位置 ,这个大致位置可以精确到省市,如图 2 所示,我们在百度搜索 IP,就可以给我们返回本机 IP 所在的城市。

IP 地址怎么定位?

2016 年 8 月 26 日,百度地图高精度 IP 定位服务 API 正式上线。但是一年后,也就是 2017 年 7 月,开发者陆续收到百度终止高精度 IP 定位服务 API 的通知邮件。这里我不想讨论工程伦理问题,仅就其高精度 IP 定位服务,谈一谈个人理解。

1.用户手机里安装了百度的服务,比如百度地图 SDK2.用户手机运行了百度的服务,比如使用百度地图进行导航,公交查询等等过程,都会让百度的服务运行起来3.百度提供服务的同时,将当前的坐标,跟 IP 地址数据,当前时间,定位方式,WI-FI 信息,移动联通电信等运营商的基站信息,传送给百度的后台服务器中,后台服务器留存了这些数据,然后也用这些数据给用户返回了用户需要的内容。这个过程也就是百度的匿名采集信息过程。用户使用前必然都是许可了百度可以使用这些匿名数据。4.百度提供了服务同时,自己收集了匿名数据。而这些数据中,就包括 IP 和 GPS 的对照数据。5.利用这些数据,就可以计算出一个 IP 曾经在哪些范围被使用过,从而得到一个精确的范围数据,这个范围的中心点,就被认为是最接近用户的地点,同时还会把误差半径也计算出来。

通过上述分析可知,百度的高精度 IP 定位服务,其根本来源于百度匿名收集服务,它的源头则是:手机位置服务。可能百度收集这些数据并非出于泄露隐私目的,但是,大数据发展导致我们可以用各个数据源去拼凑一个完整画像,这也有意无意导致一个泄露隐私的结果。所以百度下线这一功能也是情理之中的。

扩展

延伸一下,获取到精确的定位我们可以做些什么?

在一篇名为《一种基于地理位置和兴趣点信息的用户细分方法》专利申请中曾写道:

通过将客户去过的地方来量化的勾勒出用户的类型,即所有客户不再被看成简单的数字,而是具有不同兴趣点(标签)的 个体。用用户的兴趣点来量化地勾勒出用户的具体细节轮廓。采用本发明方法得出的对用 户兴趣点的诠释在某些时候甚至能超过个体本人对自身的诠释和了解。

简单翻译一下上面的话就是,通过对你不同时间段所处的位置进行分析,可以将你进行一个归类,例如,喜欢运动的用户、学生用户以及喜欢购物的用户。在通过多维度的分析后,这套系统可能会比你自己更了解你。

当然了,这样的专利并不是只有这一家,国内互联网巨头们都有着类似的专利,比如腾讯的CN103456233A[2],阿里巴巴的CN106534392B[3],这些早就不是什么遮遮掩掩的东西了。就像李彦宏说的,中国人多数情况下愿意用隐私换取便捷性。虽然这是一种“被愿意”。


最后说一点,我写公众号也有 2 年多了,虽然每次都是看心情更新的,但总感觉通过写公众号的方式分享内容总还是有些单向,而且因为申请的晚,我的公众号也没有留言功能,总觉得自己的文章有些一言堂,但又觉得建立一个读者群会没时间管理。现在临近毕业,工作也基本定下来了,想着未来几年可能都会在这一领域发展,所以还是决定建一个读者群。我会在群里邀请我的一些同学和朋友,前后端的都有,这样也可以方便大家更主动的双向沟通,不知道会有多少人响应,就先试试看。如果群二维码失效了,你可以通过第二个二维码添加我的微信拉你进群。

IP 地址怎么定位?

IP 地址怎么定位?

References

[1] 《互联网是如何工作的》: 
[2] CN103456233A: https://patents.google.com/patent/CN103456233A/zh
[3] CN106534392B: https://patents.google.com/patent/CN106534392B/zh

本文分享自微信公众号 - 01二进制(gh_d1999add1857)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这