近期,微信、抖音、微博、公众号等平台,统统上线用户 IP 属地功能,简单的说,就是在互联网发文、发言时,都会带上自己的地址信息。举个栗子,在公众号发文、在公众号留言,都会带上地址。
正所谓,外行看热闹,内行看门道。那么这个功能到底是如何实现的?背后的技术原理是啥?怎么查别人的地址信息呢?
IP 属地原理
众所周知,接入互联网,需要有公网 IP 地址。公网 IP 地址由 ISP 提供。然而 ISP 只是二道贩子,全球 IP 地址一级一级分配下来的。IANA 管理所有的 IP 地址,它大手一挥,把所有可用的 8 位网段的地址分配给了五个 RIR 。这五个 RIR 分别是 ARIN 、RIPE NCC 、APNIC 、LACNIC 、AfriNIC 。
- RIR:区域互联网地址注册机构
- ARIN:负责北美地区业务
- RIPE NCC:负责欧洲地区业务
- APNIC:负责亚太地区业务
- LACNIC:负责拉丁美洲地区业务
- AfriNIC:负责非洲地区业务
IPv4 地址一共 256 个 8 位网段,还需要排除私有地址、Loopback 地址、保留地址等,可用的 8 位网段只有两百个左右。而一个 8 位网段有 1677 万多可用 IP 地址,供 RIR 再次分配。全球 IP 地址分配详情,可在下面链接找到:
- https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml
从 IANA 地址分配表来看,我们可以通过 IP 地址的前八位,判断出 IP 地址属于哪个 RIR ,也就知道 IP 地址的位置范围。但是这个范围实在太大了,相当于全球范围的五分之一。想要更精确的位置,可以往下看 RIR 地址分配表,就能确定 IP 地址属于哪个国家或地区。以 APNIC 举例,通过下面链接查看 APNIC 地址分配详情:
- http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
表格里详细的记录了 APNIC 所有地址的分配情况,表格格式分为是注册机构、国家/地区代码、类型、起始地址、数量、分配日期、状态。通过这个表格,就能发现 IP 地址属于哪个国家或地区。但是 IP 属地功能,显示的可是省份或直辖市,那还要往下挖。
这五个 RIR 分别管理不同区域,它们也不直接给用户分配 IP 地址,而是分配给 NIR ,NIR 再分配给 LIR ,LIR 最后分配给 ISP 或最终用户。CNNIC 是中国唯一的 NIR ,也是 APNIC 下面的 NIR 。中国的 ISP / IDC / ICP / 企事业单位都是通过 CNNIC 申请 IP 地址。
- NIR:国家级互联网注册机构
- LIR:本地互联网注册机构
- ISP:互联网服务提供商
CNNIC 官网可以查到 IP 地址的位置信息,但是位置信息不一定都能精确到省份或直辖市级。以我自己的 IP 地址(120.229.6.109)为例:
- http://www.cnnic.net.cn/
查询结果是中国移动,位置范围是国家或地区级,而不是省份或直辖市级。因为查询发现 120.229.6.109 属于 120.190.0.0 - 120.255.255.255 范围中,也就是 120.192.0.0/10 网段,显示的就是这个网段的信息。
而 58.60.110.20 又可以查到具体的省份信息:广东省。根本原因是,申请 IP 网段时,有些已经确定了使用的省份/直辖市,还有些只确定了使用的国家/地区,后面根据需求,ISP 再对 IP 网段进行划分。这时,我们就可以使用另一个网络参数,对 IP 地址进行定位,那就是 ASN ,ASN 是网络上的实际值。
互联网是一个巨大的网络,它由数十万个叫做 AS(自治系统)的网络组成。AS 是由 ISP 、区域网络等管理的大型网络,也是一个大型路由器池。每个 AS 都有自己的 ASN(自治系统编号),是一个 16 比特的 AS 编号,方便识别和区分。AS 包含若干子网,还包含位置信息。还是以我自己的 IP 地址(120.229.6.109)为例:
- https://bgp.he.net/
查看到 120.229.6.109 有两个 ASN ,一个是 AS9808 ,包含 120.192.0.0/10 网段,属地为中国。另一个是 AS56040 ,包含 120.229.0.0/16 ,属地为中国广东。更精准的定位,需要按照最长匹配原则,选择最长匹配的网段,也就是选择 120.229.0.0/16 的位置信息,即中国广东。
位置定位
如果要具体的位置信息,精确到街道的那种,就要找 ISP 提供,ISP 有完整的 IP 地址位置信息的,通过 IP 地址可以定位到家庭住址、工作单位、行动轨迹等。当然,这些信息是属于个人隐私,ISP 不会对外公布,泄露隐私可是违法行为。不过,我们还可以通过网上公开的 IP 地址库,定位到市级或区级的位置信息。仍然是以自己的 IP 地址为例:
- https://ip.taobao.com/ipSearch
结果显示为广东省,淘宝 IP 地址库还提供了 API 接口,可以直接程序调用,自动显示 IP 属地。但没有城市信息,更准确的位置信息,可以用下面的网站查询:
- https://www.ip138.com/
查询结果为广东省深圳市福田区,深圳市是正确的,福田区是错误的。IP 地址库都有这类问题,市级位置信息准确率蛮高,而区级位置信息是不太准的。这里,我们可以发现,不借助 ISP 的信息,IP 地址只能准确的定位到城市位置。其实,除了 IP 地址外,还有许多其它定位的技术,比如 GPS 定位、WiFi 定位、蓝牙定位、大数据定位等,精度更准、准确率更高!所以,即使屏蔽了 IP 地址,也还是能找到精确位置!