转:为什么根据IP地址查询物理所在地,而不是mac地址?
来自 https://mp.weixin.qq.com/s/aOZQGMnMI2nkX4-qcJL4WQ
读者
不是说mac地址是计算机网卡唯一的地址吗?这样不是可以直接定位到某一台机器吗?为什么要用IP地址啊?是因为服务器历史记录只会存储IP地址还是什么原因阿?求大神解释一下~
大家还记得抓获“甘肃白银案”主犯的过程的来龙去脉吗?
白银警方一直握有案犯的DNA信息,而DNA信息是每个人唯一拥有的,那问题来了,既然DNA信息唯一识别一个人,警方为何那么多年却一直不能锁定案犯?
答案很简单,因为DNA信息库没有世间所有人的DNA信息。如果有,相信案犯绝不会多年逍遥于法网之外。。。
谁曾想案犯的远房亲戚犯事被抓进去了,提取了DNA信息。并把DNA信息录入了信息库,就是把案犯的DNA信息与其本人的身份证ID联系了起来。警方破案时,可以根据嫌疑人现场遗留DNA信息,如果在信息库里比对成功,就可以锁定嫌疑人。
白银警方没有放弃努力,一直用案犯DNA信息去比对DNA信息库。
有一天长时间的匹配查询之后,电脑上留下了相似度最高的一个DNA信息,不用说就是案犯的亲戚的,这一下大大缩小了排查范围。警方经过大量的排查工作,最终成功锁定嫌疑人,并于白银市工业学校一小卖部内将犯罪嫌疑人抓获。
为何不使用MAC地址而使用IP地址来定位位置信息?
MAC地址和IP地址在全球范围内都是唯一的,按理说都可以用来定位计算机的位置,但是目前全球范围内,并没有MAC地址与物理位置的一一对照数据库。
建MAC地址与位置信息库很难吗?
是的,销售商把电脑卖给用户时,可以轻松获得用户ID、电脑MAC对应关系,但是用户是在中国用,还是拿到非洲用,销售商无从知道,所以这个库是不可能建立起来的。
IP地址建库更可行
IP地址属于运营商的资产,运营商很容易将属于自己的IP资产与地理位置绑定起来,运营商可以将一段段的IP地址绑定到某台物理设备上,于是就生成了IP地理信息库(GeoIP),当把全球的IP地理信息库融合为一体,就可以根据用户的IP来粗略获得用户的位置信息。
读者肯定有一个大大的问题,那服务器到底可以获得客户端计算机网卡的MAC地址吗?
如果按照OSI参考模型的通信模式,服务器无法获得客户端网卡的MAC地址。
因为MAC地址位于数据链路层,本地数据链路层会被本地网关终结(Termination),然后网关提取出IP报文及以上(此时已经没有链路层的信息了),将IP报文朝着终点的方向继续中继,所以服务器可以轻松获得客户端的IP,却看不到客户端MAC地址的影子。
难道服务器就没任何办法获得计算机网卡的MAC地址?
只要有客户端的全力支持与配合这个也不难,既然数据链路层无法获得客户端的MAC地址,那能否让客户端将自己的网卡MAC地址、操作系统版本号、显卡序列号、硬盘序列号提取出来,包装在应用层的报文里传输给服务器?这些信息只要操作系统通过系统函数开放出来,应该不难获得。
上文说了,可以通过网络层的IP地址来粗略定位用户位置信息,服务器获得用户IP地址易如反掌。但是却不能依赖IP地址来锁定一台计算机、或者一个用户!
智能手机在家、在地铁、在公司、在商场,随着连接WIFI热点不断变化,手机的IP也在不断变化着,只能依赖IP地理信息库找到IP地址与位置的对应的关系。
无论手机移动到哪里,手机的MAC地址却是不变的,完全可以利用这种唯一性来锁定一台手机(移动计算机)、进而锁定一个用户。
锁定用户有什么好处?
在广告无处不在的互联网生态里,如何唯一锁定用户(用MAC地址唯一识别),并积累用户喜好(搜索引擎),为每一个用户建立一个个人喜好数据库,那么下次用户登录网站时,广告商立马就可以知道是哪个用户了。哦,原来是“王小胖”,王小胖喜欢旅游与美食,那就有针对性地推送“旅游度假”的广告,广告转化为money的概率更高。
上文说了,依赖IP来定位用户位置,最多得到的是一个大概位置,源于IP地理信息库的不准确。如果用户使用代理服务器,服务器看到的是代理服务器的IP,服务器得到的是代理的位置信息,而不是用户的位置信息。
有一次在上海的办公室查询自己的IP,发现位于美国,因为是美国的公司,上海办公室访问Internet全部通过美国公司总部出口,自然就是美国出口的位置了。
准确的客户端位置定位,需要计算机上的GPS硬件接收器的配合,把计算机的实时经纬度信息,上传给服务器,然后服务器将位置信息反馈给客户端,这是当前的APP实现方式。
如果亲爱的朋友们喜欢这篇文章,转发给您身边的朋友们阅读,这是对作者最大的支持,谢谢!
转:为什么根据IP地址查询物理所在地,而不是mac地址?的更多相关文章
- 交换机的端口状态是UP,但是查询该端口下的MAC地址为空
(电脑已关机)电脑与交换机直连的端口状态 还是 UP ,但是 查询该端口下的 MAC地址为空. 初步怀疑原因: Wake-on-LAN(电脑关机,网卡还在工作) Wake-On-LAN简称WOL,是一 ...
- MAC地址与IP地址的区别
介绍一下MAC地址的知识,MAC地址和IP地址的区别以及MAC地址在实际应用中所涉及到的安全问题. 一.基础知识 如今的网络是分层来实现的,就像是搭积木一样,先设计某个特定功能的模块,然后把模块拼起来 ...
- 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?
1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...
- IP地址和MAC地址绑定的必要性
计算机网络是一个共通的网络,世界上任何计算机都可以互相访问. 实现的原理基于网络通讯的互联网交互五层模型. 计算机网络的历史发展 当计算机网络技术初始利用的时代,几台计算机通过集线器连接,就可以实现网 ...
- 如果重新设计网络,有没有可能合并IP地址跟MAC地址?
前阵子看网络基础相关的书籍,冒过一个疑问,为什么要有MAC地址跟IP地址?两者可否合二为一? 现在的逻辑是这样子:在数据传输过程中,路由器查看这个数据包的IP地址,跟路由表中记录的“IP集合:下一 ...
- Linux 获取本机IP、MAC地址用法大全
getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...
- 使用ARP获取局域网内设备IP和MAC地址
根据Arp列表数据,查询本地设备在线状态 使用 arp -a 获得所有内网地址,首先看Mod对象 public struct MacIpPair { public string HostName; p ...
- 为什么既要有IP地址还要有MAC地址
在脑海中一直有个疑问,在网络上发送信息的时候为什么既要有IP地址还要有MAC地址,IP是唯一的,MAC地址也是唯一的,用一个难道不行么? 既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么 ...
- C#获取路由器外网IP,MAC地址
C#实现的获取路由器MAC地址,路由器外网地址.对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码.至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密 ...
随机推荐
- cookie和sission的原理及异同
Cookie Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持. 通常有三个步骤来识别回头客: 服务器脚本发送 ...
- [转载]ISO 8601规则
1.每年有52周或者53周2.周一至周日为一个完整周.3.每周的周一是该周的第1天.周日是该周的第7天4.每年的第一周 为 每年的第一个周四所在的周.比如 2017年1月5日为当年的第一个周四,那么 ...
- QSettings 类
一 .QSettings介绍: 用户通常希望应用程序记住其设置.在windows中,这些设置保存在注册表中,ios在属性文件列表中,而unix,在缺乏标准的情况下,其存储在ini文本中.QSettin ...
- spark报错解决
19/03/04 18:18:42 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.i ...
- composer安装doctrine/dbal
composer安装doctrine/dbal composer安装doctrine/dbal,安装不成功,使用的安装命令为官方提供命令“composer require doctrine/dbal” ...
- 高级shell 脚本
1.函数 函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用.要在脚本中使用该代码块时,只要使用所起的函数名就行了(这个过程称为调用函数).本节将会介绍如何在shell脚本中创建和使用函数 创 ...
- 非常全的VsCode快捷键
按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...
- nodeEE双写与分布式事务要点一二
数据库与缓存双写问题 计算机领域任何一个问题都可以通过增加一个抽象"层"来解决. 业务中为了减少热点数据不必要的db查询,往往会增加一层缓存来解决I/O性能.可是I/O多了一层也就 ...
- Python入门经典案例一
# 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? sum = 0 values = range(1, 5) for i in values: for j in valu ...
- Oracle插入语句日期格式设置
insert into test values (1,'2015-01-01'); 直接设置成字符串,会报出“文字与格式字符串不匹配”的异常: 如果正确插入,则要将字符型数据转成日期型数据: 1 in ...